如何實現IIS 7.0對非HTTP協議的支援

piny發表於2021-09-09

在《再談IIS與ASP.NET管道》介紹各種版本的IIS的設計時,我們談到IIS 7.0因引入WAS提供了對非HTTP協議的支援。這個對於WCF的服務寄宿來說意義重大,它意味著我們透過IIS/WAS寄宿的服務終結點不僅僅可以採用BasicHttpBinding、WSHttpBinding/WS2007HttpBinding等基於HTTP協議的繫結,也可以採用NetTcpBinding、NetNamedPipeBinding和NetMsmqBinding。

在預設的情況下,IIS 7.0針對非HTTP支援的特性是關閉的。為了將一個IIS中的Web應用作為WCF服務的宿主,並採用非HTTP的通訊協議,我們不但需要為Web應用所在的站點新增相應的站點繫結(net.tcp、net.pipe和net.msmq等),還需要為Web應用本身進行相應的設定使之允許相應的通訊協議。我們可以透過三種方式實現相應的設定。

一、命令列設定

我們可以以命令列的方式執行Appcmd.exe來設定站點繫結和開啟某個Web應用針對某種協議的支援,該命令所在的目錄為%windir%system32inetsrv。如下所示的命令透過Appcmd.exe為預設站點(Default Web Site)新增了基於net.tcp、net.pipe和net.msmq的站點繫結,其中net.tcp繫結採用預設埠808。然後在該站點下建立了一個名稱為WcfServices的Web應用,對映的物理路徑是C:WcfServicesService。最後為建立的Web應用同時開啟了針對http、net.tcp、net.pipe和net.msmq四種協議的支援。

   1: REM 為站點” Default Web Site”新增針對net.tcp,net.pipe和net.msmq站點繫結

   

   2: appcmd.exe set site "Default Web Site" –+bindings.[protocol='net.tcp',bindingInformation='808:*']

   

   3: appcmd.exe set site "Default Web Site" –+bindings.[protocol='net.pipe',bindingInformation='*']

   

   4: appcmd.exe set site "Default Web Site" –+bindings.[protocol='net.msmq',bindingInformation='localhost']

   

   5:

   

   6: REM 建立Web應用WcfServices

   

   7: appcmd add app /site.name:"Default Web Site" /path:/WcfServices /physicalpath:C:WcfServicesService

   

   8:

   

   9: REM 為WcfServices應用開啟對http、net.tcp、net.pipe和net.msmq的支援

   

  10: appcmd.exe set app "Default Web Site/WcfServices" /enabledProtocols:http,net.pipe,net.tcp,net.msmq


二、配置檔案設定

所有方式的設定都體現在對相應配置檔案的修改。IIS 7.0中用於控制站點繫結和Web應用針對某個協議的支援的配置檔案為applicationHost.config,該配置檔案儲存的目錄為%windir%system32inetsrvconfig。我們可以直接修改這個配置檔案來完成我們需要的設定。

存在於applicationHost.config中的如下這段配置就是上面的命令列執行的結果。三個新增的站點繫結被新增到了表示站點配置節的節點中,而表示我們建立的Web應用的節點的enabledProtocols屬性中包含了我們透過命令列設定的四種協議。

   1: 

   

   2:   ...

   

   3:   

   

   4:     ...

   

   5:     

   

   6:       ...

   

   7:       

   

   8:         ...

   

   9:         

   

  10:           

   

  11:         

   

  12:         

   

  13:           

   

  14:           

   

  15:           

   

  16:           

   

  17:         

   

  18:       

   

  19:     

   

  20:   

   

  21: 


三、IIS管理器設定

IIS管理器本身提供了視覺化的方式是我們很容易地實現對站點繫結的新增、刪除和修改。如圖7-11所示,如果我們在IIS管理器中選擇相應的站點,在右邊“編輯網站”一欄會出現一個“繫結…”按鈕。點選該按鈕會出現一個“網站繫結”的對話方塊,當前站點的所有繫結會在這個對話方塊中列表。我們可以編輯和刪除現有的站點繫結,也可以新增新的站點繫結。IIS管理器只提供了針對站點繫結的設定,為站點中具體某個Web應用開啟或者關閉某種協議的支援還得需要透過上面兩種方式來完成。

為作為WCF服務宿主的Web應用和它所在的站點進行了如上的設定之後,我們就可以直接將基於HTTP的終結點繫結直接替換成基於其他協議型別的繫結。下面配置片斷所示的客戶端終結點採用了NetTcpBinding,而地址代表部署在宿主Web應用的.svc檔案地址。

   1: 

   

   2:   

   

   3:     

   

   4:       

   

   5:              address="net.tcp://localhost/WcfServices/CalculatorService.svc"

   

   6:              binding="netTcpBinding"

   

   7:              contract="Artech.WcfServices.Service.Interface.ICalculator"/>

   

   8:       

   

   9:   

   

  10: 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3034/viewspace-2805204/,如需轉載,請註明出處,否則將追究法律責任。

相關文章