2008-11-07 140 views
4

我有一個奇怪的問題。我有一個在2.0框架下編譯的web服務,它正在被一個用1.1框架編譯的windows應用程序使用。這工作得很好。現在,在將Web服務升級到3.5框架之後,Windows應用程序不再能夠調用它。.Net 3.5 WebService無法通過.Net 1.1調用Windows應用程序

在3.5中創建一個小窗口應用程序作爲測試能夠調用Web服務沒有問題,所以我知道它仍然有效。

代碼沒有任何改變,它只是編譯爲3.5項目而不是2.0項目。

對於那些誰關心我得到了錯誤回來,那就是:

的類型 'System.Net.WebException' 未處理的異常發生在 system.web.services.dll

其他信息:底層連接已關閉: 接收到 意外錯誤。

有什麼我可以做的Web服務,使其向後兼容(如果這甚至是問題)?

[編輯]對以下答案的迴應(迄今爲止):重新發現沒有工作,也沒有刪除和重新添加web服務。由於WSDLs是相同的,我不相信這是一個SOAP問題(都顯示SOAP 1.2)。從服務器瀏覽到web服務工作得很好。

回答

1

嘗試'重新發現'在.NET 1.1中的Web服務(可能只是一個測試應用程序),看看問題是否存在。

+0

這並未解決問題。我甚至嘗試刪除引用並重新添加Web引用,問題仍然存在。 謝謝反正! – 2008-11-07 15:38:50

0

你可以直接在IIS上安裝Web服務嗎?如果沒有,請檢查IIS中的應用程序配置。您必須切換ASP.NET的版本。

+0

是的,瀏覽到Web服務沒問題。我可以通過asmx接口從服務器執行每個方法。 – 2008-11-07 15:44:20

1

它可能是SOAP 1.0與SOAP 1.1。 3.5服務可能使用1.1或1.2,默認情況下,我認爲可以在web.config綁定中進行配置。

+0

從原始Web服務到新Web服務的wsdls是相同的。我不相信這是問題。 謝謝反正! – 2008-11-07 15:43:10

0

作爲額外的「完整性檢查」,3.5 web服務是否可以通過soapUI成功調用?

+0

1.1應用程序能否成功調用3.5版中未升級的Web服務?例如,創建一個新的3.5 Web服務,添加一個返回字符串的HelloWorld方法,並查看是否可以從1.1應用程序調用該方法而不會出錯。 – 2008-11-15 01:21:27

1

這可能是一個KeepAlive問題(例如,通過代理)。作爲一個測試,將下面的代碼添加到客戶端生成的Reference.cs中(醜陋 - 是的)。我在使用Fiddler(它是一個代理)來測試客戶端和服務器之間的通信時看到了這個問題。

// Put this override in the generated Reference.cs of the client proxy 
    protected override System.Net.WebRequest GetWebRequest(Uri uri) 
    { 
     HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri); 

     webRequest.KeepAlive = false; 
     webRequest.ProtocolVersion = HttpVersion.Version10; 
     return webRequest; 
    } 
+0

我試過這個,但是這也沒有幫助。 – 2008-11-12 20:18:17

0

我遇到了這個問題,並通過在服務上強制域名聲明來解決它。

[webservice] .Credentials = System.Net.CredentialCache.DefaultCredentials;

OR

[web服務] .Credentials =新System.Net.NetworkCredential([用戶],[PWD],[域]);

相關問題