增加线程超时.NET

时间:2015-02-11 08:50:11

标签: .net multithreading wcf

我有一个WCF方法,可以进行一些计算和插入。在线程中调用此方法。我的方法需要超过45分钟(这对我来说很好)但在此之后它会抛出一个错误,说"'超时已过期。在操作完成之前经过的超时时间或服务器没有响应"。 只有插入部分在事务范围内,在剖析器中我可以看到插入仅发生不到一分钟。我想这是超时的线程。如何增加时间?请帮忙

由于 兰芝斯

1 个答案:

答案 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;
}

这就是主意。之后,您可能希望添加不能使用相同通道一次运行两次计算的检查,或者至少管理计算队列。由您决定,但这代表了基本方法