我有我使用,以取代舊的ASP.NET Web服務的WCF服務。該服務似乎工作正常,但由於某種原因無法處理同時發生的請求。我服務的實施具有以下屬性:爲什麼我的Winforms託管WCF服務單線程?
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class HHService : IHHService
我的主機聲明如下所示:
baseAddress = new Uri("http://0.0.0.0:8888/HandHeld/");
host = new ServiceHost(typeof(HHService), baseAddress);
ServiceMetadataBehavior behavior;
behavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (behavior == null)
{
behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(behavior);
}
host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
host.AddServiceEndpoint(typeof(IHHService), new BasicHttpBinding(), "HHService.asmx");
HHService.LogMessage += new EventHandler<HHService.LogMessageEventArgs>(HHService_LogMessage);
host.Open();
服務運行並返回正確的結果,但如果兩個客戶端試圖使在一個呼叫同時一個客戶端將阻塞,直到另一個客戶端完成,而不是一起執行的呼叫。我沒有使用任何配置文件。我試圖以編程方式做所有事情。我是否有不正確的設置導致此行爲?我已經使用NetTCPBinding運行其他服務而沒有這個問題。
編輯: 針對約翰·桑德斯: 我不熟悉任何ASP.NET兼容模式。我沒有使用任何會話狀態服務是無狀態的,它只是處理請求。除了實際方法的實現之外,我所做的其他一切都在這裏列出的代碼中。
可能的解決方案:
我打電話從主窗體的Form_Load事件的host.Open()
功能。我將呼叫轉移到單獨的線程。所有這些線程都是打電話給host.Open()
,但現在這個服務看起來像我所期望的那樣。
請在我的編輯來看看,因爲我沒有得到它做工精細未做比我提到的其他任何更改。我不確定它爲什麼會起作用。 – Mykroft 2009-06-17 19:31:25