代码之家  ›  专栏  ›  技术社区  ›  Jonathan Smith

ASMX WebService无法在LIVE服务器上工作

  •  1
  • Jonathan Smith  · 技术社区  · 11 年前

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

    我已经在我的开发机器和我自己的Windows2008服务器上测试了这两个组件。当我将其部署到客户的服务器上时,无论是在服务器上还是远程调用,Web服务登录页都可以正常工作,但是,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日志中不会显示任何内容。你知道是什么原因造成的吗?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Gary Walker    11 年前

    您是否正在尝试处理大型请求?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应用程序)

        2
  •  0
  •   Jonathan Smith    11 年前

    终于弄清了真相。必须使用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。