2
我有一個運行SAP系統的客戶端,我的任務是通過Web服務將我們的系統連接到SAP系統。客戶端提供了WSDL文件,我從中生成了相應的C#代碼,我將按如下方式調用:Webservice連接被取消
Service service = new Service();
service.Url = "myUrl";
service.Credentials = new NetworkCredential("user", "pw");
ServiceResponse result = new ServiceResponse();
try
{
result = service.MyOperation(myData);
Console.WriteLine("Result.EfReturn {1}, Result.EtMess[0].Message {2}", result.EvReturn, result.EtMess[0].Message);
}
catch (System.Exception ex)
{
Console.WriteLine("Exception:\n" + ex.ToString());
}
這一般適用。但是,每過一段時間(比如:每200個請求左右,有時更經常)我得到一個異常:
System.Net.WebException: Die Anfrage wurde abgebrochen: Die Anfrage wurde abgebrochen..
bei System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
bei System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
bei System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
bei WebServices.WebService_SAP.service.MyOperation(MyData myData) in c:\Users\cso\Desktop\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1\ServiceTest.cs:Zeile 54.
奇怪的是,使用了SoapUI時,這種情況不會發生,但我得到驗證對於每一個請求錯誤(這似乎不影響結果,雖然) - 日誌輸出看起來是這樣的:
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Connection can be kept alive indefinitely
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Stale connection check
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Attempt 1 to execute request
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Sending request: POST /some/service/binding HTTP/1.1
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Receiving response: HTTP/1.1 401 Unauthorized
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Connection can be kept alive indefinitely
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Target requested authentication
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Authorization challenge processed
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Authentication scope: BASIC 'SAP NetWeaver Application Server [TSE/881]'@somedomain:8033
Wed Jul 22 11:19:18 CEST 2015:INFO:somedomain:8033 requires authentication with the realm 'SAP NetWeaver Application Server [TSE/881]'
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Found credentials
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Attempt 2 to execute request
Wed Jul 22 11:19:18 CEST 2015:DEBUG:Sending request: POST /some/service/binding HTTP/1.1
Wed Jul 22 11:19:19 CEST 2015:DEBUG:Receiving response: HTTP/1.1 200 OK
對於我這個樣子了SoapUI只是再次嘗試,然後第二個請求工作。
所以我想,我的問題是:
- 有沒有人見過這樣的行爲?你是如何克服它的?
- 我的問題可能與我在SoapUI中看到的身份驗證問題有關嗎?
- 如何調試這樣的問題?
當你得到'HTTP/1.1 401 Unauthorized'時,入站響應頭中沒有'challange header'? –
當使用SoapUI是正確的時候,初始'401'是正確的 - 這就是http基本認證的工作方式。客戶端不知道需要身份驗證,因此它在不提供用戶名/密碼的情況下執行'POST',服務器用'401'做出響應,然後客戶端再次嘗試,這次提供用戶名/密碼並且'POST'成功。您可以通過勾選* Pre-emptive auth *複選框來阻止它在SoapUI中的使用。 – mjturner
@mjturner:謝謝你的解釋。你認爲這可能與我的一般問題有關嗎?我注意到服務對象有一個名爲PreAuthenticate的布爾標誌,它可能和你提到的SoapUI選項一樣... – csoltenborn