什么原因会导致一个服务器出现错误,而另一个服务器没有出现?

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异常,并返回以下堆栈跟踪:
底层连接已关闭: 发生了发送意外错误。
    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)
当我尝试在我的开发机上调试这个问题时,它工作得很好,没有出现异常。
我们的Web服务器没有最近的更新,并且我可以使用Firefox从Web服务器连接到wsdl服务(但是我无法使用IE连接,但这可能与我们在Web服务器上使用IE的其他问题有关)。
我尝试了所有发布在此处的解决方案,包括设置KeepAlive = FalseServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3,但都没有解决这个问题。
我们的Web服务器正在运行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 [写入请求] 调用者: 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

追踪日志中会显示什么? - Brad Christie
@BradChristie 我在哪里找到跟踪日志?(抱歉,网站开发不是我的专长) - Rachel
外部网络服务是否需要 SSL? - Blachshma
@Blachshma 是的,它是一个https网络服务。 - Rachel
@Rachel:在ASP.NET Web服务上启用跟踪 - Brad Christie
显示剩余5条评论
2个回答

3
显然在我的情况下,是因为Web服务供应商增加了安全性,而我们的Web服务器没有正确的库来解密连接。 我们唯一的线索是几天前在同一天停止工作的单个系统事件查看器条目,其ID为36874,源为Schannel,上面写着:
“远程客户端应用程序收到了SSL连接请求,但客户端应用程序支持的密码套件都不受服务器支持。 SSL连接请求失败。”
但是,如果您正在自行调试此问题,则此链接非常有用,因为它提供了一些简化的错误描述,指向了我正确的方向,即我的问题与无法连接到他们的Web服务有关。
“基础连接已关闭:发送时发生意外错误”
当客户端计算机无法发送HTTP请求时,出现此问题。 客户端计算机无法发送HTTP请求,因为连接已关闭或不可用。 在本文中查找错误http://support.microsoft.com/kb/915599
链接的Microsoft支持页面还详细介绍了一些不同的解决方案,以尝试修复此问题的最常见原因。

2
只是一个想法,不知道是否正确:几个月前我们的一台服务器上发生了同样的事情,因为有人(安全团队?:/)更改了"%SYSTEMROOT%\Temp"文件夹的写入权限。自那时起,XMLSerializer无法生成用于序列化/反序列化的临时程序集。
来自http://www.hanselman.com/blog/ChangingWhereXmlSerializerOutputsTemporaryAssemblies.aspx
当使用ASP.NET中的XmlSerializer时,可能会出现权限问题,可以通过授予用户帐户对%SYSTEMROOT%\Temp文件夹的读/写权限来解决。
因此,您可以检查应用程序池使用的帐户是否在"%SYSTEMROOT%\Temp"文件夹上具有写入权限...
祝您好运...

谢谢您的建议,不过我已经检查了权限,显然每个人都可以访问并写入该文件夹 :) - Rachel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接