我有一个WCF方法,它可以进行一些计算和插入。此方法是在线程中调用的。我的方法需要超过45分钟(这对我来说很好),但之后它会抛出一个错误,上面写着"超时已过期。在完成操作或服务器没有响应之前已经过了超时期"。只有插入部分在事务范围内,在探查器中,我可以看到插入只发生了不到一分钟。我想是线程超时了。如何增加外出时间?请帮助
谢谢Ranjith
我在一个项目中使用了一个很容易解决的问题。
我们没有你的代码,所以可以猜测很多,但如果你不急于从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;
}
这就是想法。之后,您可能需要添加检查,以确保不能使用同一通道同时运行两个计算,或者至少管理一个计算队列。由您决定,但这代表了