我想在一个线程(在后台)上打开一个代理,线程创建一个新的代理实例,调用该服务的一个方法并立即配置服务。在线程上启动多个服务
所有这一切都发生在一个线程:
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'。最终即使抛出异常也会执行代码。关于你的问题,我不确定。我也相信把你的绑定传递给构造函数是明智的。这可能是超时异常的原因。 –