C#中异步Web服务调用的超时时间

3

我正在使用C#,并在客户端从ASP.Net asmx Web Service创建了一个代理,使用VSTS 2008的Add Web Reference...功能。

我正在使用异步方法调用模型(即调用AsyncXXX方法,它会立即返回),并处理完整事件(当从服务器端接收到响应时,我添加事件处理程序来处理完整事件)。

我发现如果服务器长时间没有响应,那么完整事件将不会被触发。

我的问题是,

  1. 如果调用AsyncXXX方法后没有从服务器收到响应,完整事件处理程序不会被调用,这是预期的特性还是我的错误?

  2. 是否有任何方法可以分配超时值——以便我不会无限期地等待完整事件处理程序?

提前致谢, George

3个回答

3
在您的Web服务的web.config文件中,您可以设置一个超时时间(如果正在调试模式下,您还需要更改为非调试模式)。这样应该会导致它抛出一个异常,从而触发您的完成事件。然后,您需要检查异常以查看它是通过还是失败。
<system.web>
    <httpRuntime executionTimeout="120" />
</system.web>

谢谢 ck,你指的是 web.config 中的哪个确切配置项? - George2
<system.web><httpRuntime executionTimeout="120" /></system.web> 请参见http://msdn.microsoft.com/en-us/library/e1f13641.aspx - cjk

0
如果您希望您的 Web 服务永不超时,您可以在 Web 服务类中添加以下代码行:
this.Timeout = System.Threading.Timeout.Infinite;

-1

SoapHttpClientProtocol 代理类应该继承自其祖先 WebClientProtocol,因此拥有从其祖先继承来的 Timeout 属性。这可以回答你的第二个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接