.NET Web 服务 (asmx) 超时问题

标签 .net wcf web-services timeout wcf-client

我正在连接到供应商提供的 Web ASMX 服务并通过线路发送一组数据。当您向项目添加服务引用时,我的第一次尝试遇到了 Visual Studio 默认在 app.config 文件中引发的 1 分钟超时。我把它增加到 10 分钟,又是一次暂停。 1小时,再次超时:

Error: System.TimeoutException: The request channel timed out while waiting for
a reply after 00:59:59.6874880. Increase the timeout value passed to the call to
 Request or increase the SendTimeout value on the Binding. The time allotted to
this operation may have been a portion of a longer timeout. ---> System.TimeoutE
xception: The HTTP request to 'http://servername/servicename.asmx' has exceeded the allotted timeout of 01:00:00. The time allotted to this
operation may have been a portion of a longer timeout. ---> System.Net.WebExcept
ion: The operation has timed out
   at System.Net.HttpWebRequest.GetResponse() [... lengthly stacktrace follows]

我联系了供应商。他们确认电话可能需要一个多小时(别问,他们是我存在的祸根。)为了安全起见,我将超时时间增加到 10 小时。但是,Web 服务调用继续超时 1 小时。相关的 app.config 部分现在如下所示:

   <basicHttpBinding>
    <binding name="BindingName" closeTimeout="10:00:00"
                    openTimeout="10:00:00" receiveTimeout="10:00:00" sendTimeout="10:00:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="None">
      <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
      <message clientCredentialType="UserName" algorithmSuite="Default" />
     </security>
    </binding>
   </basicHttpBinding>

相当荒谬,但无论如何超时仍然在 1 小时开始。不幸的是,每个更改都至少需要额外一个小时来测试。我是否遇到了一些内部限制 - 另一个要在某处更改的超时设置?一小时内对这些设置的所有更改都达到了预期效果。

感谢您提供的任何帮助!

最佳答案

首先: 参见 Steven Cheng[MSFT] 回复 here关于超时。您可以为 httpRuntime 设置执行超时。之后他说了一些有趣的话,那就是“此外,请确保您已将‘编译 debug="false"’设置为使超时正常工作

除了他们的末端可能出现严重错误(或者返回的数据如此庞大/我不会判断 - 可能是一个很好的理由)这一事实之外,您是否尝试过异步调用他们的操作?结果一样吗?我估计需要一个小时

YourVendor.WebService ws = new YourVendor.WebService();
ws.LongRunningOperationCompleted += new YourVendor.LongRunningOperationEventHandler(ws_LongRunningOperationCompleted);

ws.LongRunningOperationAsync();

// Implement the ws_LongRunningOperationCompleted handler (stub will auto generate)

完成的事件处理程序将有一个特定的事件参数参数,其中将包含结果,对于事件参数 e,e.Result 应该在完成时包含您需要的内容。

关于.NET Web 服务 (asmx) 超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064416/

相关文章:

C# 数组在特定范围内的最小值

c# - 在主机 ('Anonymous' 上配置的身份验证方案不允许在绑定(bind) 'WebHttpBinding' 上配置的那些 ('Basic' )

java - Alfresco 5.0 : AuthenticationUtils. startSession 生成 404

wcf - ValidateUriRoute-这是什么?为什么它中止了我的套接字?

c# - 安装 .NET Framework 4.5 后 HttpContext.Current.User 为空

web-services - Camel cxf webservice - 获取响应的问题

.net - 无需配置文件即可访问 ASMX Web 服务,在环境之间切换

.net - 在 Sitecore 中重写 URL 参数

c# - 如何在上下文绑定(bind)对象中链接消息接收器(面向方面​​的编程)

c# - 十进制舍入扩展错误 - 无法使用实例引用访问;用类型名称限定它