如何實現IIS 7.0對非HTTP協議的支援
在《再談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中的如下這段配置就是上面的命令列執行的結果。三個新增的站點繫結被新增到了表示站點配置節的
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java9系列第九篇-對HTTP2協議的支援與非阻塞HTTP-APIJavaHTTP協議API
- JMeter 擴充套件外掛實現對自定義協議的支援JMeter套件協議
- 實現網站由http協議轉為https協議網站HTTP協議
- HTTP協議和MQTT協議對比誰更好HTTP協議MQQT
- Go Module 支援 HTTP 協議的私有庫方案GoHTTP協議
- 如何在 Apinto 實現 HTTP 與gRPC 的協議轉換 (上)APIHTTPRPC協議
- 如何在 Apinto 實現 HTTP 與gRPC 的協議轉換 (下)APIHTTPRPC協議
- QT使用 http 協議通訊的實現示例QTHTTP協議
- websocket和http有什麼不同?以及websocket協議如何實現?WebHTTP協議
- HttpCanary實現對HTTP2協議的抓包和注入(原理篇)HTTPPCA協議
- okhttp 原始碼解析 – http 協議的實現 – 重定向HTTP原始碼協議
- okhttp 原始碼解析 - http 協議的實現 - 重定向HTTP原始碼協議
- RTSP協議、RTMP協議、HTTP協議的區別協議HTTP
- 02 前端HTTP協議(圖解HTTP) 之 簡單的HTTP協議前端HTTP協議圖解
- HTTP 協議HTTP協議
- [HTTP協議]HTTP協議
- http協議HTTP協議
- HTTP快取協議實戰HTTP快取協議
- HTTP協議如何發起請求HTTP協議
- HTTP 1.1協議原創作者Roy Fielding對Google SPDY協議的評論HTTP協議Go
- http協議分析HTTP協議
- 理解http協議HTTP協議
- HTTP協議概述HTTP協議
- HTTP 協議類HTTP協議
- HTTP協議(2)HTTP協議
- 小解http協議HTTP協議
- Netty 原始碼中對 Redis 協議的實現Netty原始碼Redis協議
- HTTP 協議的前世今生HTTP協議
- HTTP協議的特點HTTP協議
- Triple 協議支援 Java 異常回傳的設計與實現協議Java
- 基於 CentOS 7 搭建支援 HTTP 協議的 SVN 伺服器CentOSHTTP協議伺服器
- okhttp 原始碼解析 - 網路協議的實現 - HTTP 之 cookie 管理HTTP原始碼協議Cookie
- 《圖解HTTP》——簡單的HTTP協議圖解HTTP協議
- 《圖解HTTP》—簡單的HTTP協議圖解HTTP協議
- HTTP協議和HTTPS協議的異同點?HTTP協議
- 實現 Raft 協議Raft協議
- netty系列之:netty對SOCKS協議的支援Netty協議
- ThinkJS 3.0 如何實現對 TypeScript 的支援JSTypeScript