[英]Running WCF self-hosted in multiple web application worker processes
在Web應用程序中,我運行一個簡單的wcf主機 :
Uri baseAddress = new Uri("http://localhost:8080/hello");
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.Open();
}
我在Global.asax/Start
編寫了它。 因此,它將在Web應用程序的開頭打開並監聽端口8080
,並且我可以通過http://localhost:8080/hello
調用HelloWorldService
定義的任何方法。 我已經在IIS
上發布了它,它也可以正常運行,並且一切正常。
當我將Maximum Worker Processes
增加到2
或大於1
時,就會出現問題。
關鍵是每個工作進程都是一個單獨的進程,要獲取端口8080,但OS不允許一個以上的進程來獲取端口。
看來問題可以通過處理異常來解決,因此只有一個進程可以獲取端口。 但這不是真的! 當具有端口的進程發生回收時,不能保證立即執行新的輔助進程。
注意:不能將主機和Web應用程序分開的任何解決方案,因為服務內部的所有業務都將由我的Web應用程序注入和控制。
我有個主意。 我將在每個進程中使用不同的端口並運行它們。 我也閱讀了《 應用程序請求路由》,以使用負載平衡功能將一個特定端口分散到工作進程獲得的多個不同端口。
請感謝我或給我解決方案。
您可以使用端口池。 在global.asax上,選擇未使用的端口之一。
Web應用程序可能不是托管WCF服務的不錯選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.