返回非常大的字符串时.asmx 请求超时

Posted

技术标签:

【中文标题】返回非常大的字符串时.asmx 请求超时【英文标题】:.asmx request timeout when returning a very large string 【发布时间】:2012-10-05 04:30:20 【问题描述】:

我们有几个 .asmx soap web 服务来处理我们的 web gui 和我们的后端应用服务器之间的通信。最近,我们从在内置 Web 服务器中运行 Visual Studio 2010 解决方案转变为通过 IIS 7.5 运行它。很快我们就开始经历非常缓慢的响应时间,并开始出现我们以前没有看到的各种异常,比如我们的 xml 中的超时和序列化错误。

我们已尝试将问题缩小到最低限度,但缺乏解决方案,所以现在我们将其“扔出去”,看看是否有人遇到过相同的情况或可能有解决方案。

PS。我们知道 .asmx Web 服务已过时,但目前我们无法将服务转换为 WCF。 DS。

此代码将重现错误:

[WebMethod]
public string DebugGetAuditTrail()

   const string data = "Some random text that is not very interesting. ";
   StringBuilder lotsOfData = new StringBuilder();
   for(int counter=0; counter<100000; counter++)
   
      lotsOfData.Append(data);
   

   return lotsOfData.ToString();

我们的 web.config 声明:

<httpRuntime executionTimeout="600" requestValidationMode="2.0" maxRequestLength="1400000"/>

提前致谢!

【问题讨论】:

【参考方案1】:

理想情况下,不建议使用 Web 服务发送大量数据。但是,要处理这种情况,最好的方法是将数据拆分成小数据包。

您可以做的是,创建一个标头来索引数据包。收到标头后,配置服务器发送剩余部分数据。

【讨论】:

感谢您的回答。肥皂网络服务会有长度限制,这不是很奇怪吗?在 Visual Studio 2012 的内置 Web 服务器中运行解决方案与在 IIS 7.5 中运行解决方案有什么区别? 应该或多或少相同,因为它们都遵循 machine.config 文件中指定的限制。此外,它不仅仅是长度,而是处理特定请求所需的时间。你可以参考这篇文章iis.net/configreference/system.webserver/asp/limits做进一步的参考。但是,在任何情况下,从肥皂服务返回大量响应都不是理想的情况。

以上是关于返回非常大的字符串时.asmx 请求超时的主要内容,如果未能解决你的问题,请参考以下文章

httpclient的post请求超时

超时请求后如何返回上一个屏幕?

如何修改nodejs请求默认超时时间?

关于TOMCAT响应超时请求重发的问题

ios5中的请求超时

多个 HTTP 请求触发 HTTP Client 超时