2011-02-24 101 views
0

我們目前有這樣的設置:多個用戶訪問WCF,檔服務

1)一個網站方面的功能對用戶而言,它的模塊中的一個連接到單獨的web服務(WCF)作爲參考。

2)僅在網絡內可見的內部網絡服務,它向公共網站提供單獨的功能。它呈現並返回一些數據和rdlc報告作爲字節數組。

當我嘗試在網絡系統下運行Web服務的應用程序池時,網站無法訪問它。但是當我將Web服務設置爲本地系統時,它起作用。

剩下的唯一問題是,無論何時,更多的用戶嘗試從網站訪問此Web服務時,Web服務會停頓並需要刷新池以使其再次運行。我檢查了Web服務的IIS設置,連接設置爲無限制。

幫助!

+0

你有沒有性能測試本地運行的WCF服務? – 2011-02-24 05:24:30

+0

你如何實例化你的服務的代理對象?我在那裏看到一個問題。你能在這裏發佈一些代碼嗎? – Pradeep 2011-02-24 05:27:42

+0

IIS只是一個不錯的,可靠的應用程序主機 - 它是一個網絡服務器(不同的野獸)。對於任何嚴重的問題,我總是使用自我託管我的WCF服務(在NT服務或其他)。 – 2011-02-24 05:32:00

回答

0

正如我在評論中所說的,對於任何認真的工作,我通常會建議不要將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,虛擬目錄和類似的東西要容易得多。

參見:

+0

你基本上建議我應該重新設計這是一個Windows WCF服務? – 2011-02-24 06:21:00