我有一个WCF方法,可以进行一些计算和插入。在线程中调用此方法。我的方法需要超过45分钟(这对我来说很好)但在此之后它会抛出一个错误,说"'超时已过期。在操作完成之前经过的超时时间或服务器没有响应"。 只有插入部分在事务范围内,在剖析器中我可以看到插入仅发生不到一分钟。我想这是超时的线程。如何增加时间?请帮忙
由于 兰芝斯
答案 0 :(得分:0)
有一个很容易解决我用于项目的这个问题。
我们没有您的代码所以可以猜测,但如果您不急于从WCF服务器部分获得响应,您实际上可以在消息处理程序中对您的计算部分进行子线程处理'准备 - 异步 - 以某种方式回应你的客户。这样,您的消息处理程序可以直接响应您的客户端请求,并且不会发生线程超时。
但是,这意味着您可能必须更改客户端/服务器的工作方式,例如,如果计算机完成计算,请定期让客户端请求服务器。
要在客户端通道处理程序中执行简单的子线程,您可以执行以下操作:
public MyObject payload = null;
// Called to initiate the computation on the channel
public bool StartComputation(MyParamClass param)
{
// Reset payload to make sure 'IsComputationDone()' returns 'not ready'
payload = null;
// Start thread where computation is done
ThreadPool.QueueUserWorkItem(o => {
// Do computation with param
// Payload is set when computation is done
payload = doStuff(param);
}
return true;
}
// Called regularly to know if computation is ready
public bool IsComputationDone()
{
return payload != null;
}
// Finally get payload
public MyObject GetResult()
{
return IsComputationDone() ? payload : null;
}
这就是主意。之后,您可能希望添加不能使用相同通道一次运行两次计算的检查,或者至少管理计算队列。由您决定,但这代表了基本方法