2012-12-21 81 views
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異常引發,並返回此堆棧跟蹤:當我嘗試我的開發機器上調試這個問題

 
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從網絡服務器連接到wsdl服務(但我無法連接到IE,但這可能與我們在IE上使用IE的其他問題有關web服務器)

我試過張貼錯誤消息#2 here,包括設置KeepAlive = FalseServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3的全部決議,但是,沒有一直在努力解決這個問題。

我們的Web服務器運行的是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 
+0

跟蹤日誌中顯示了什麼? –

+0

@BradChristie我在哪裏可以找到跟蹤日誌? (對不起,Web開發並不是我的專長) – Rachel

+0

外部Web服務是否需要SSL? – Blachshma

回答

3

顯然,在我的特殊情況下,這是因爲Web服務供應商增加了他們的安全性,而我們的Web服務器沒有正確的庫來解密連接。

我們唯一的線索是一個單一的系統事件查看器條目與36874的ID和Schannel中的源幾天就回來當天我們的網站停止工作提到:

的SSL連接請求是從遠程客戶端 應用程序收到,但服務器不支持客戶端應用程序支持的密碼套件。SSL連接請求 失敗。

但是如果你自己調試這個問題,this link是非常有用的,因爲它給了它向我指出了正確的方向錯誤的一些簡單的描述,我的問題是有關不能夠連接到他們的網絡服務。

基礎連接已關閉:一個發送

當客戶端計算機不能發送一個HTTP請求 發生此問題的發生意外錯誤。客戶端計算機無法發送HTTP請求,因爲 連接已關閉或不可用。查找 這篇文章中的錯誤http://support.microsoft.com/kb/915599

和鏈接的微軟支持頁面也相當詳細的一些不同的解決方案,你可以嘗試修復這個問題的最常見的原因。

2

只是一個想法,不知道它是很好的一個:同樣的事情發生幾個月前,我們的服務器之一,因爲有人(安全小組?:/)更改了「%SYSTEMROOT%\ Temp」文件夾的寫入權限。由於該操作,XMLSerializer無法生成用於序列化/反序列化的臨時程序集。

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

當使用從ASP.NET XmlSerializer的有權限問題 可以可以通過在%SYSTEMROOT%\ Temp文件夾

授予用戶帳戶的讀/寫權限 來解決

因此,也許你可以檢查你的應用程序池所使用的帳戶具有寫權限的「%SYSTEMROOT%\ temp」的文件夾...

祝你好運...

+0

感謝您的建議,但我檢查了權限,顯然每個人都有權訪問該文件夾:) – Rachel

相關問題