1

我有一个连接到 SQL 数据库的简单 ASMX Web 服务。我也有附带的网络服务测试器应用程序。

我已经在我的开发机器和我自己的 Windows 2008 服务器上测试了这两个组件。当我将它部署到客户的服务器时,webservices 服务登录页面在服务器上和远程调用都可以正常工作,但是,webservice 测试器在任何位置都无法正常工作。它抛出一个异常

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive.
System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at WebServiceTester.frmMain.btnCallWS_Click`

发生错误时,Windows 事件查看器、SQL 日志或 IIS 日志中不显示任何内容。有什么想法可能导致这种情况吗?

4

2 回答 2

1

您是否正在尝试处理大型请求?IIRC 正确,默认最大值为 4MB,您可能会收到此错误。

在 Web.config 文件中,覆盖应用程序的 maxRequestLength 的值。例如,Web.config 中的以下条目允许上传小于或等于 1 GB 的文件:

<httpRuntime maxRequestLength="1048576" />

IIRC 在 2.0 框架中的绝对最大值是 2GB,永远不要寻找理由尝试比这更大的值。

编辑——更多细节

一些防火墙可以区分 GET 和 POST 请求,因此您可能使用浏览器进行 GET,但在 POST 中被阻止。如果您想调试网络流量,您可能会发现如果您可以在 Chrome 浏览器中复制 POST(通过 JQuery 轻松连接硬编码的帖子),您可能会发现更容易,然后您可以使用浏览器检查标头等。或者您可以使用 Fiddler(一个很棒的应用程序),请参阅为 Fiddler 配置 .NET 应用程序以使用 Fiddler调试您的测试应用程序(假设它是基于您的堆栈跟踪的 winform 应用程序)

于 2013-09-18T12:58:13.743 回答
0

终于到了这个底线。必须使用 Windbgx86 分析 w3wp.exe 崩溃小型转储并按照这些说明从 Microsoft 和 sos.dll 加载符号http://vstepic.blogspot.co.uk/2012/03/how-to-debug-iis -75-application-pool.html(感谢该文档的作者不够!!!)

唯一的区别是我必须运行“!pe -nested”而不是“!CLRstack”。

这转储了几条具有相同错误的消息。服务器上缺少库 DLL。

于 2013-09-19T19:57:49.930 回答