什么可能导致一个服务器上的此错误,而不是另一个?

时间:2012-12-21 16:27:13

标签: asp.net vb.net web-services

我们有一个连接外部网络服务的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.WebExceptionSendFailure异常触发,并返回此堆栈跟踪:

The underlying connection was closed: An unexpected error occurred on a send. -
    at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
    at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
    at ExternalWebService.ProcessRequestService.processCommand(parameters)

当我尝试在我的开发机器上调试此问题时,它工作正常,不会发生异常。

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

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

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

什么可能导致在一台计算机上发生此错误,而不是另一台计算机?

编辑:以下是跟踪信息:

System.Web.Services.Asmx Information: 0 : Calling XmlSerializer [Create XmlSerializer]
    Method: System.Xml.Serialization.XmlSerializer#1669721556::FromMappings(System.Xml.Serialization.XmlMapping[]#4002219=[4], ExternalWebService.ProcessRequestService#93032588=ExternalWebService.ProcessRequestService)
    Caller: System.Web.Services.Protocols.SoapClientType#42808772::.ctor(ExternalWebService.ProcessRequestService#93032588=ExternalWebService.ProcessRequestService)
    ProcessId=2796
    LogicalOperationStack=
    ThreadId=14
    DateTime=2012-12-21T17:02:39.2826250Z
    Timestamp=61755143048799345
System.Web.Services.Asmx Information: 0 : Return from XmlSerializer [Create XmlSerializer]
    Caller: System.Web.Services.Protocols.SoapClientType#42808772::.ctor(ExternalWebService.ProcessRequestService#93032588=ExternalWebService.ProcessRequestService)
    ProcessId=2796
    LogicalOperationStack=
    ThreadId=14
    DateTime=2012-12-21T17:02:39.6576250Z
    Timestamp=61755144323396760
System.Web.Services.Asmx Information: 0 : Calling XmlSerializer [Write Request]
    Method: Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer#1231684::Serialize(System.Xml.XmlTextWriter#8023888=.., System.Object[]#19695157=[40], (null), (null))
    Caller: ExternalWebService.ProcessRequestService#60553900::Serialize()
    ProcessId=2796
    LogicalOperationStack=
    ThreadId=14
    DateTime=2012-12-21T17:02:39.7357500Z
    Timestamp=61755144598320131
System.Web.Services.Asmx Information: 0 : Return from XmlSerializer [Write Request]
    Caller: ExternalWebService.ProcessRequestService#60553900::Serialize()
    ProcessId=2796
    LogicalOperationStack=
    ThreadId=14
    DateTime=2012-12-21T17:02:39.7357500Z
    Timestamp=61755144621621529
System.Web.Services.Asmx Information: 0 : Calling WebRequest.GetResponse
    Method: System.Net.HttpWebRequest#2800407::GetResponse()
    Caller: ExternalWebService.ProcessRequestService#60553900::GetWebResponse()
    ProcessId=2796
    LogicalOperationStack=
    ThreadId=14
    DateTime=2012-12-21T17:02:39.7357500Z
    Timestamp=61755144622114240

2 个答案:

答案 0 :(得分:3)

显然在我的特定情况下,这是因为Web服务供应商增加了他们的安全性,而我们的Web服务器没有解密连接所需的正确库。

我们唯一的线索是一个系统事件查看器条目,其ID为36874,并且在我们的网站停止工作的同一天返回Schannel的来源说:

  

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

但是如果你自己调试这个问题,那么this link非常有用,因为它给出了一些错误的错误描述,它指出了我正确的方向,我的问题与无法连接到他们的网络服务。

  

基础连接已关闭:发送

时发生意外错误      

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

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

答案 1 :(得分:2)

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

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

  

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

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

祝你好运......