我想在一個線程(在後臺)上打開一個代理,線程創建一個新的代理實例,調用該服務的一個方法並立即配置服務。在線程上啓動多個服務
所有這一切都發生在一個線程:
var background = new Thread(() =>
{
var proxy = new AssignmentSvcProxy(new EndpointAddress(worker.Address));
try
{
proxy.Channel.StartWork(workload);
proxy.Dispose();
}
catch (EndpointNotFoundException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (CommunicationException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (TimeoutException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (Exception ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
}) { IsBackground = true };
background.Start();
我一直看到,即使我已經超時設置爲最大值爲CloseTimeout,OpenTimeout,ReceiveTimeout,發生的SendTimeout間歇超時問題。
我只是想確保明智的設計這不是一個問題,即打開一個線程上的服務和處理它?
編輯:
代理內部建立與上爲每個線程不同的端點定義綁定的信道。
這是一個有點混亂,你說話「服務」的,我所期待的「代理」(甚至「客戶」),例如「線程打開服務」應該是「線程爲我的服務打開代理」,對嗎? – Jeroen
對不起,我只是更新了問題,所以基本上我的服務已經打開,但是代理只是調用proxy.Channel.StartWork(工作負載);那個特定的服務(已經是自己託管的) - 有意義嗎? –
你可能想在你的try-catch子句中加上'finally'。最終即使拋出異常也會執行代碼。關於你的問題,我不確定。我也相信把你的綁定傳遞給構造函數是明智的。這可能是超時異常的原因。 –