5

我们有一个连接到外部 Web 服务的 ASP.Net 网站,几天前它突然停止工作。

基本代码是这样的:

Try
    request = New ExternalWebService.ProcessRequestService

    ' Error occurs here:
    response = request.processCommand(parameters)

    ' Do some other stuff with response here

Catch webEx As System.Net.WebException

    ' This triggers and generic error gets displayed

Catch ex As Exception

Finally

End Try

System.Net.WebException触发SendFailure异常,并返回此堆栈跟踪:

底层连接已关闭:发送时发生意外错误。-
    在 System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest 请求)
    在 System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest 请求)
    在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串方法名,对象 [] 参数)
    在 ExternalWebService.ProcessRequestService.processCommand(参数)

当我尝试在我的开发机器上调试这个问题时,它工作正常并且没有发生异常。

我们的网络服务器最近没有更新,我可以使用 FireFox 从网络服务器连接到 wsdl 服务(但是我无法连接到 IE,但这可能与我们在网络服务器上使用 IE 时遇到的另一个问题有关)

我已经尝试了此处针对错误消息 #2 发布的所有解决方案,包括设置KeepAlive = FalseServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3,但是没有一个能够解决该问题。

我们的网络服务器正在运行 Windows Server 2003 和 IIS6.0

什么会导致此错误发生在一台机器上,而不是另一台机器上?

编辑:这是跟踪信息:

System.Web.Services.Asmx 信息:0:调用 XmlSerializer [创建 XmlSerializer]
    方法:System.Xml.Serialization.XmlSerializer#1669721556::FromMappings(System.Xml.Serialization.XmlMapping[]#4002219=[4], ExternalWebService.ProcessRequestService#93032588=ExternalWebService.ProcessRequestService)
    调用者:System.Web.Services.Protocols.SoapClientType#42808772::.ctor(ExternalWebService.ProcessRequestService#93032588=ExternalWebService.ProcessRequestService)
    进程 ID=2796
    逻辑操作栈=
    线程 ID=14
    日期时间=2012-12-21T17:02:39.2826250Z
    时间戳=61755143048799345
System.Web.Services.Asmx 信息:0:从 XmlSerializer 返回 [创建 XmlSerializer]
    调用者:System.Web.Services.Protocols.SoapClientType#42808772::.ctor(ExternalWebService.ProcessRequestService#93032588=ExternalWebService.ProcessRequestService)
    进程 ID=2796
    逻辑操作栈=
    线程 ID=14
    日期时间=2012-12-21T17:02:39.6576250Z
    时间戳=61755144323396760
System.Web.Services.Asmx 信息:0:调用 XmlSerializer [写入请求]
    方法:Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer#1231684::Serialize(System.Xml.XmlTextWriter#8023888=.., System.Object[]#19695157=[40], (null), (null))
    调用者:ExternalWebService.ProcessRequestService#60553900::Serialize()
    进程 ID=2796
    逻辑操作栈=
    线程 ID=14
    日期时间=2012-12-21T17:02:39.7357500Z
    时间戳=61755144598320131
System.Web.Services.Asmx 信息:0:从 XmlSerializer 返回 [Write Request]
    调用者:ExternalWebService.ProcessRequestService#60553900::Serialize()
    进程 ID=2796
    逻辑操作栈=
    线程 ID=14
    日期时间=2012-12-21T17:02:39.7357500Z
    时间戳=61755144621621529
System.Web.Services.Asmx 信息:0:调用 WebRequest.GetResponse
    方法:System.Net.HttpWebRequest#2800407::GetResponse()
    调用方:ExternalWebService.ProcessRequestService#60553900::GetWebResponse()
    进程 ID=2796
    逻辑操作栈=
    线程 ID=14
    日期时间=2012-12-21T17:02:39.7357500Z
    时间戳=61755144622114240
4

2 回答 2

3

显然,在我的特殊情况下,这是因为网络服务供应商提高了他们的安全性,而我们的网络服务器没有正确的库来解密连接。

我们唯一的线索是一个 ID 为 36874 的系统事件查看器条目,几天前我们的网站停止工作的同一天有一个 Schannel 的来源,上面写着:

从远程客户端应用程序接收到 SSL 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。SSL 连接请求失败。

但是,如果您自己调试此问题,此链接非常有用,因为它对错误进行了一些简化的描述,为我指明了正确的方向,我的问题与无法连接到他们的 Web 服务有关。

底层连接已关闭:发送时发生意外错误

当客户端计算机无法发送 HTTP 请求时,会出现此问题。客户端计算机无法发送 HTTP 请求,因为连接已关闭或不可用。在这篇文章http://support.microsoft.com/kb/915599中查找错误。

链接的 Microsoft 支持页面也非常详细地介绍了一些不同的解决方案,您可以尝试解决此问题的最常见原因。

于 2012-12-22T16:10:51.890 回答
2

只是一个想法,不知道它是否好:几个月前在我们的一台服务器上发生了同样的事情,因为有人(安全团队?:/)更改了“%SYSTEMROOT%\Temp”文件夹的写入权限. 由于该操作,XMLSerializer 无法生成用于序列化/反序列化的临时程序集。

来自http://www.hanselman.com/blog/ChangingWhereXmlSerializerOutputsTemporaryAssemblies.aspx

从 ASP.NET 使用 XmlSerializer 时,可以通过授予用户帐户对 %SYSTEMROOT%\Temp 文件夹的读/写权限来解决权限问题

因此,也许您可​​以检查您的应用程序池使用的帐户是否对“%SYSTEMROOT%\Temp”文件夹具有写入权限...

祝你好运...

于 2012-12-21T17:51:10.993 回答