我有一个连接到SQL数据库的简单ASMX Web服务。我还附带了webservice tester app。
我已经在我的开发机器和我自己的Windows 2008服务器上测试了这两个组件。当我将其部署到客户的服务器时,webservices服务登录页面在服务器上和远程调用都可以正常工作,但是,Web服务测试器根本无法在任何位置工作。它会引发异常
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日志中不会显示任何内容。可能导致这种情况的任何想法?
答案 0 :(得分: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(一个很棒的应用程序),请参阅Configure .NET Application for Fiddler以使用Fiddler调试您的测试应用程序(假设它是基于您的堆栈跟踪的winform应用程序)
答案 1 :(得分:0)
终于到了最底层。不得不使用Windbgx86分析w3wp.exe崩溃minidump,并按照这些说明http://vstepic.blogspot.co.uk/2012/03/how-to-debug-iis-75-application-pool.html加载来自Microsoft和sos.dll的符号(不能再感谢该文档的作者!!!)
唯一的区别是我必须运行“!penes”而不是“!CLRstack”。
这会抛出几条带有相同错误的消息。服务器上缺少库DLL。