WCF 非http寄宿IIS
摘要
從IIS 7 開始, IIS增加了對非HTTP協議的支持. 因此, 自IIS 7之后, 可以將NetTcpBinding等非HTTP協議的Bindings直接寄宿在IIS上面. 本文將介紹如何在IIS上配置WCF NetTcpBinding, 并且對其工作的方式進行比較深入的討論
Windows Process Activation Service
下圖是IIS監聽在HTTP協議上的工作方式. 對HTTP協議的監聽是在內核模式下的HTTP.sys的幫助下完成
從IIS7開始,IIS還加入了對非HTTP協議的支持。對于那些采用非HTTP協議,但是又需要部署在IIS里面,從而利用IIS優秀的管理功能的服務來說,比如WCF服務,可謂一大福音。IIS7可以支持多種非HTTP協議,比如net.tcp,net.msmq, net.pipe等。由于HTTP.sys并不會監聽非HTTP協議的端口. 對于非HTTP協議, 則有各自的Windows Serivce來進行監聽. 例如Net.Tcp協議, 則是由Net.Tcp Port Sharing Service和Net.Tcp Listener Adapter服務進行監聽, 并且寄宿在SMSvcHost.exe中.
進過拆分之后, WAS不僅處理HTTP請求,還可以處理非HTTP協議的請求。HTTP請求是由Http.sys截獲的,并且在傳遞給WAS之前,就已經傳遞給w3svc中的HTTP管理器,但是,其他請求都是通過WAS偵聽器的適配器接口轉發給配置管理器和進程管理器的,而沒有經過w3svc。
關于 WAS的介紹可以參考這里 :
http://msdn.microsoft.com/en-us/library/ms734677(v=vs.110).aspx
http://blogs.msdn.com/b/swiss_dpe_team/archive/2008/02/08/iis-7-support-for-non-http-protocols.aspx
為了讓IIS支持net.tcp,必須先安裝WAS(Windows Process Activation Service),即windows進程激活服務。
?
?
一:生成一個簡單的wcf項目,以及IIS服務配置,發布項目?,步驟
二:Web.config配置
<?xml version="1.0" encoding="utf-8"?> <configuration><appSettings><add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /></appSettings><system.web><compilation debug="true" targetFramework="4.5" /><httpRuntime targetFramework="4.5"/></system.web><system.serviceModel><services><service name="TcpWcf.Service1" ><endpoint binding="netTcpBinding" address="" contract="TcpWcf.IService1" /><endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/><host><baseAddresses><add baseAddress="net.tcp://localhost:7878/Service1.svc"/></baseAddresses></host></service></services><bindings><netTcpBinding><binding portSharingEnabled="true"></binding></netTcpBinding></bindings>
<behaviors><serviceBehaviors><behavior><!-- 為避免泄漏元數據信息,請在部署前將以下值設置為 false --> 【需要修改】<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false"/><!-- 要接收故障異常詳細信息以進行調試,請將以下值設置為 true。在部署前設置為 false 以避免泄漏異常信息 --><serviceDebug includeExceptionDetailInFaults="false"/> 【需要修改】 </behavior> </serviceBehaviors> </behaviors> <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <directoryBrowse enabled="true"/> </system.webServer> </configuration>
?
三:發布時網站配置,進行TCP綁定
行非HTTP的服務寄宿是WAS為WCF提供的最顯著的特性。由于在默認的情況下,IIS僅僅支持對于HTTP請求的處理,我們需要相應的方式對IIS相關配置進行相關的修改,從而改變IIS默認的請求處理行為。在上面我們說過,IIS 7.0廣泛采用了基于XML文件的配置方式,所以最終極的方式就是直接修改相應的配置文件。但是,直接修改配置文件的方式,出錯的頻率很高,對于很多的配置,我們都可以直接通過IIS管理器進行相應的修改。此外,我們可以選擇通過命令行的方式修改相應的配置,IIS為我們提供了一系列的命令。
windows里面的四個服務需要開啟
- NetTcpPortSharing:為WCF提供TCP端口共享,關于端口共享;
- NetTcpActivator:為WAS提供基于TCP的激活請求,包含TCP監聽器和對應的監聽適配器;
- NetPipeActivator:為WAS提供基于命名管道的激活請求,包含命名管道監聽器和對應的監聽適配器;
- NetMsmqActivator:為WAS提供基于MSMQ的激活請求,包含MSMQ監聽器和對應的監聽適配器。
?
?
四:發布后的結果
五:客戶端引用,引用時需要多點幾次
?
轉載于:https://www.cnblogs.com/xiaoyaodijun/p/6771352.html
總結
以上是生活随笔為你收集整理的WCF 非http寄宿IIS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 翻新版三星Note7发售消息曝光:原价7
- 下一篇: iOS10.3的新玩意儿