修复:基于 Microsoft .NET Framework 2.0 Service Pack 2 并异步调用 Web 服务调用的应用程序在运行 Windows 7 的计算机上引发异常

应用对象
Windows 7 Enterprise Windows 7 Enterprise N Windows 7 Professional Windows 7 Professional N Windows 7 Ultimate Windows 7 Ultimate N

症状

在运行 Windows 7 的计算机上,你会遇到以下一种或多种症状。

症状 1

请考虑以下情形:

  • 您在服务器上运行使用 Microsoft .NET Framework 2.0 Service Pack 2 (SP2) 的异步 Web 服务。

  • HttpWebRequest 异步操作向 Web 服务发送 Web 请求。

  • Web 服务引发异常。

在这种情况下,HttpWebRequest 异步操作不调用 BeginGetResponse 方法或回调函数。 但是,HttpWebRequest 异步操作意外完成。 然后,Web 服务停止响应。 此外,服务器上的 CPU 使用率可能会增加到 100%,然后服务器停止响应。

症状 2

 请考虑以下情形:

  • 您运行基于 Microsoft .NET Framework 2.0 SP2 的应用程序,该应用程序使用 Microsoft ASP.NET Web 服务客户端组件调用 Web 服务。 例如,应用程序代码是由 Wsdl.exe 进程生成的,或者应用程序调用 SoapHttpClientProtocol 类。
  • 客户端异步调用 Web 服务调用。
  • 客户端向服务器发送请求。
  • 然后,客户端将收到包含零长度内容的 Web 响应。

在这种情况下,当 Web 服务尝试处理此响应时,将引发 System.ArgumentNullException 异常。 然后,你会收到以下错误消息:

注意

值不能为 null。

注意 当客户端同步调用 Web 服务调用时,不会出现此问题。

原因

症状 1

出现此问题的原因是,.NET Framework 异常处理没有考虑 HttpWebRequest.EndGetRequestStream 方法在该异常包含来自服务器的响应时引发异常的情况。

解决方法

修补程序信息

Microsoft 现在提供了一个受支持的修补程序。 但是,它仅用于更正本文描述的问题。 仅将其应用于遇到此特定问题的系统。

若要下载此修补程序,请访问以下 Microsoft Connect 网站:

http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=27977

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

详细信息

有关“症状 1”部分中所述问题的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

973134修复:运行基于 .NET Framework 2.0 S 的异步 Web 服务时,Web 服务停止响应,并引发异常

有关“症状 2”部分中描述的问题的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

973136修复:当基于 .NET Framework 2.0 S 的应用程序尝试处理对异步 ASP.NET Web 服务请求的具有零长度内容的响应时,出现 ArgumentNullException 异常错误消息:“值不能为 null”