正如我在評論中所說的,對於任何認真的工作,我通常會建議不要將IIS用作應用程序主機。它有幾個缺點(它決定了服務地址,它必須處理應用程序池和回收應用程序池等)。
相反,我通常以自承載的方式執行我的生產服務,例如,在Windows NT服務中。這給了我更多的靈活性:我可以完全控制所有方面,包括地址,並且可以隨意啓動/停止服務,而且我不受應用程序池回收的限制。
基本上,你需要做的是從WCF運行時創建一個ServiceHost
的實例,併爲其提供服務類來承載,並且可選地提供一個(或多個)基地址,您的服務將暴露端點。
ServiceHost svcHost = new ServiceHost(typeof(MyWCFService));
// optionally set additional properties here, if needed
svcHost.Open(); // now, the host is open and accepting
當你想停止收聽請求時,你只需撥打svcHost.Close()
,你的服務主機就不在了。
當你打包成一個NT服務這一點,通常你做的設置,並在OnStart
方法的服務主機的.Open()
,你在NT服務的OnStop
方法處理svcHost.Close()
。
這個包含ServiceHost
的應用程序不一定是NT服務 - 特別是對於測試而言,將ServiceHost放入控制檯應用程序並啓動它,從而使您的WCF服務變爲現實,測試/ debug /增強,然後再關閉控制檯應用程序。在我看來,比IIS,虛擬目錄和類似的東西要容易得多。
參見:
你有沒有性能測試本地運行的WCF服務? – 2011-02-24 05:24:30
你如何實例化你的服務的代理對象?我在那裏看到一個問題。你能在這裏發佈一些代碼嗎? – Pradeep 2011-02-24 05:27:42
IIS只是一個不錯的,可靠的應用程序主機 - 它是一個網絡服務器(不同的野獸)。對於任何嚴重的問題,我總是使用自我託管我的WCF服務(在NT服務或其他)。 – 2011-02-24 05:32:00