Wednesday, December 10, 2008

在Https中建立WCF service

在web.config中設定相關字串

<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IWGWCF" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="true" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>

<services>
<service behaviorConfiguration="ServiceBehavior" name="WGWCF">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IWGWCF"
name="serverEnd" contract="IWGWCF" />
<host>
<baseAddresses>
<add baseAddress="https://17-00sf300-01/WGWS" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>

<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"
httpsGetUrl="https://17-00sf300-01/WGWS/" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="WGWCFBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"
httpsGetUrl="https://17-00sf300-01/WGWS/" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

WGWCF 使用session

在binding中設定好ReliableSession.enabled = True即可

 

另外在Contract中,可以設定SessionMode=SessionMode.Requied

[ServiceContract(Name = "IWGWCF", SessionMode = SessionMode.Required)]
public interface IWGWCF
{
[OperationContract]
string search(string keyword, int start, int returnCount);


}

在behavior中可以設定session使用的時間周期

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class WGWCF : IWGWCF
{
public string search(){

}
}

Tuesday, December 2, 2008

加入服務參考

有別於'加入WEB參考',WCF所提供的服務需要透過'加入服務參考'來讓client使用。

在開發client程式中,使用vs 2008升級了原本的舊程式碼,卻怎麼也找不到'加入服務參考'。由於轉換的時候把專案轉成了'網站'形式,以為是因為網站無法使用'服務參考'。

在這篇文章中有說明 http://msdn.microsoft.com/zh-tw/library/bb398791.aspx (......"只有以 .NET Framework 3.5 為目標的網站和以 .NET Framework 3.0 或 .NET Framework 3.5 為目標的 Web 應用程式專案,才有 [加入服務參考] 對話方塊。"........... )

現在可以使用wcf的服務了。

EXT的data store

使用data store時,想要動態改變其中的變數。會使用到data store的Properties--baseParams。

剛開始沒看懂以為這個param指的是data store中所有的變數都可以動態改變,因此有了這樣的程式碼(原先已經generate好一個data store了,現在是要改變裡面的proxy屬性)

Ext.apply(Paging.grid.store.baseParams,
{
proxy: new Ext.data.HttpProxy({
url: 'http://aaa.com.tw/aaa.aspx?start=ooo&end=xxx'
})
start: 0,
limit: 3,
}
);


想要動態改變proxy中的url屬性。但是一直無法替換,一直到大師提醒才發現baseParams指的是url中可以傳遞的參數,所以改變如下

Ext.apply(Paging.grid.store.baseParams,
{
start: 0,
limit: 3,
start: cal_1_input,
end: cal_2_input
}
);


這樣可以動態的改變原本data store中的內容了

Thursday, November 27, 2008

web service 使用Session

web service中使用session需要開啟EnableSession
[WebMethod(EnableSession = true, CacheDuration=0....)]

web.config中<sessionState mode="">  mode不等於none

 

.NET中session的方式是透過Cookie儲存ID,才可以延續使用。
如果是在Web service中使用session,會來存取web service就不一定是瀏覽器
可能是程式碼。

如果是程式碼的話,則需要在程式碼中使用CookieContainer

WebService ws = new WebService();
System.Net.CookieContainer container = new System.Net.CookieContainer();

ws.CookieContainer = container ;
ws.XXXX();

CookieContainer 中會保存server端傳回來的sessionId,所以就可以延續的使用。

如果有需要的話,也是可以把CookieContainer存起來,再傳到需要使用的網頁或其他程式碼。

Friday, November 14, 2008

IIS 7安裝.net3

1. 若IIS在.net之後才安裝的話,跟2.0的aspnet_regiis.exe -i 不一樣

"%WINDIR%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -r

可以在IIS的處理對應常式中看到.svc有正確的對應指令aspnet_isapi.dll,
若還是無對應的話(我是有遇到還是沒有對應),參考MSDN的設定

驗證 svc 檔案類型已在 IIS 7.0 中正確對應

1.

開啟命令提示視窗,並輸入 start inetmgr,以開啟網際網路資訊服務 (IIS) MMC 嵌入式管理單元。
2.

在左窗格中,展開具有該電腦名稱的節點,然後展開 [網站] 節點,再選取 [預設的網站]。
3.

按兩下 [功能檢視] 中的 [處理常式對應]。
4.

使用應用程式對應清單,驗證 .svc 檔案已對應至 aspnet_isapi.dll。如果該檔案並未正確對應:
1. 按一下 [新增 Managed 處理常式]。
2. 在 [要求路徑:] 中輸入 *.svc。
3. 在 [類型] 文字方塊中輸入 System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089。
4. 在 [名稱:] 文字方塊中輸入 svc-Integrated。
5. 按一下 [確定]。
6. 按一下 [新增指令碼對應]。
7. 在 [要求路徑:] 中輸入 *.svc。
8. 在 [可執行檔:] 文字方塊中輸入 %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll。
9. 在 [名稱:] 文字方塊中輸入 svc-ISAPI-2.0。
10. 使用上移/下移控制項,確保清單中 Managed 處理常式 (svc-Integrated) 的位置出現在 aspnet_isapi (svc-ISAPI-2.0) 處理常式之前。
11. 按一下 [確定]。



2.  預設網站->.net編譯->預設語言   改為 c#

不指定也可以,可在web.config中指定



 



總算讓WCF的.svc在IIS上部屬完成了

Monday, November 10, 2008

https的建立

 

    建立提供CA的伺服器,我在自己的windows 2003上面建立,XP pro, vista utimate都不支援參考

    (http://blog.blueshop.com.tw/topcat/archive/2007/04/03/50380.aspx)安裝憑證授權單位(CA)

      1. 因為不想花錢或是只在內部使用的Web 站台,想要使用SSL的功能,就必須自己成為憑證授權單位,自己發憑證給自己的網站使用

      2. 電腦名稱與CA有很大的關連,建議先將電腦名稱更改為叫有意義的名字

      3. 先想好要IIS中的哪一個站台成為SSL的站台

      4. 安裝CA的步驟:控制台/新增或移除程式/新增移除Windows元件/Certificate Services

      5. 安裝完畢後會在IIS的預設的網站中建立CertSrv,CertControl,CertEnroll等三個虛擬目錄

        產生憑證要求

        在要安裝ssl憑證的http server上面(這邊我是在IIS 7上面產生)

        1. 在伺服器的功能檢視中,選擇'伺服器憑證'->'建立憑證要求'
        2. '一般'填入安裝完CA的電腦名稱
          (輸入「一般名稱」,此名稱十分重要,預設為NetBios的電腦名稱(IntraNet上使用),但若使用在 InterNet上,則必須改用網站的FQDN名稱(例如:dcicc.ncit.edu.tw)。 //若網站名稱與憑證名稱不同,則使用者在瀏覽時會出現「安全性憑證的名稱不正確或與網站的名稱不相符」的安全性警告 )
        3. 密碼編譯者, 長度,我以預設值設定
        4. 選擇憑證要求的檔案名稱'D:\SSLCertification\17-0940666-02.txt'
         
        送出憑證要求
        在需要申請憑證的電腦上面
          1. 將上一個步驟所產生的檔案'D:\SSLCertification\17-0940666-02.txt',其內容複製到剪貼簿

          2. 開啟瀏覽器,鍵入「'http://17-0940666-02/certsrv/Default.asp'」 //17-0940666-02為CA的電腦名稱,若為本機也可設定為127.0.0.1

          3. 按一下「要求憑證」。

          4. 按一下「提交進階憑證要求」。

          5. 按一下「用 Base-64 編碼的 CMC 或 PKCS #10 檔案來提交憑證要求,或用 Base-64 編碼的 PKCS #7 檔案提交更新要求」。

          6. 在已儲存的要求下方的文字方塊中,按下Ctrl+V,貼上之前複製的內容,按一下「提交」。

           

          發行憑證

          回到安裝憑證單位的主機上面

            1. 控制台/系統管理工具/憑證授權單位

            2. 展開後點選「擱置要求」資料夾

            3. 點選剛剛提交的憑證要求

            4. 點選功能表上的「執行/所有工作/發行」

            5. 點選「發出的憑證」資料夾

            6. 對剛剛發出的憑證按2下滑鼠以檢視之

            7. 按下「詳細資料」的索引標籤,按一下「複製到檔案」

            8. 按下一步,點選匯出的檔案格式為「Base-64 Encoded X.509 (.CER)」

            9. 輸入欲產生的憑證檔案名稱,例如:C:\dcicc.cer

            10. 下一步/完成/確定。

             

            在Web Server上安裝憑證

            在需要架設https的主機上,打開IIS 7 管理員

            1. 在伺服器的功能檢視中,選擇'伺服器憑證'->'完成憑證要求'

            2. 設定好'憑證授權的檔案'的路徑與名稱,好記的名稱設定好, 把在CA上面產生的dcicc.cer檔載入

            3. 完成

             

            設定https繫結

            1. 在IIS 7 中選擇要建立https的網站

            2. '編輯站台' -> '繫結'

            3. '新增'->'類型' https ->'ssl憑證'  剛才得到的.cer檔

            4. 完成

            Friday, October 31, 2008

            Wsus設定

            公司的wsus規定設為

            [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate]
            "WUServer"=http://siteaddr"
            "WUStatusServer"="http://siteaddr
            "ElevateNonAdmins"=dword:00000001

            [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]
            "AutoInstallMinorUpdates"=dword:00000001
            "NoAutoRebootWithLoggedOnUsers"=dword:00000001
            "UseWUServer"=dword:00000001
            "RescheduleWaitTimeEnabled"=dword:00000001
            "RescheduleWaitTime"=dword:0000001e
            "DetectionFrequencyEnabled"=dword:00000001
            "DetectionFrequency"=dword:00000006
            "RebootWarningTimeoutEnabled"=dword:00000001
            "RebootWarningTimeout"=dword:0000001e
            "RebootRelaunchTimeoutEnabled"=dword:00000001
            "RebootRelaunchTimeout"=dword:0000001e
            "NoAutoUpdate"=dword:00000000
            "AUOptions"=dword:00000004
            "ScheduledInstallDay"=dword:00000000
            "ScheduledInstallTime"=dword:00000003

             

             

            自行更改了幾個機碼,讓wsus不會自動幫我更新,改以詢問的方式

            "NoAutoUpdate"=1  (不自動升級)

            "AUOptions"=2   (提醒安裝)

            "AutoInstallMinorUpdates"=0  (不自動安裝)

            "NoAutoRebootWithLoggedOnUsers"=1 (可選擇稍後重新啟動)

            Wednesday, October 1, 2008

            ASP讀取跨網站.NET 2.0ASPX

            這行程式碼是夾在一個asp網頁(http://bbb.org.tw/xxx.asp)中

               1:  <script language="javascript" src="http://aaaa.org.tw/fff/js/aaaaaJS.aspx"></script> 



            aaaaaJS.aspx的功用是response.write一份javascript

            http://aaaa.org.tw的環境為.net 2.0 使用vs 2008, web application專案開發

            在執行http://bbb.org.tw/xxx.asp時,load到這份aaaaaJS.aspx IE6,IE7即會產生錯誤,無法顯示網頁。(fx 3執行正常)
            目前還不知道確實的原因,先改寫成



               1:  <script language="javascript" src="http://aaaa.org.tw/fff/js/aaaaaJS.js"></script>



            直接讀取該份javascript

            Wednesday, September 17, 2008

            javascript 剪貼簿

            <script type="text/javascript">
            <script type="text/javascript">
            function clipboard(str){
            if(event.ctrlKey){
            if(event.keyCode=86){
            alert(window.clipboardData.getData("TEXT"))
            }
            }else{
            }
            }
            </script>


            IE版的