Web 服务连接被取消
Webservice connections are canceled
我有一个运行 SAP 系统的客户,我的任务是通过 Web 服务将我们的系统与该 SAP 系统连接起来。客户端提供了 WSDL 文件,我从中生成了相应的 C# 代码,我按如下方式调用:
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 中看到的身份验证问题有关?
- 如何调试此类问题?
解决方案是重新生成客户端的网络服务代码。我们之前使用 MS 的 Wsdl.exe 工具生成了代码;从 Visual Studio(Add/Service 参考)内部重新生成后,生成的代码(似乎使用更新的 WS 框架)工作得更好。我们很少看到像问题中提到的错误。
我有一个运行 SAP 系统的客户,我的任务是通过 Web 服务将我们的系统与该 SAP 系统连接起来。客户端提供了 WSDL 文件,我从中生成了相应的 C# 代码,我按如下方式调用:
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 中看到的身份验证问题有关?
- 如何调试此类问题?
解决方案是重新生成客户端的网络服务代码。我们之前使用 MS 的 Wsdl.exe 工具生成了代码;从 Visual Studio(Add/Service 参考)内部重新生成后,生成的代码(似乎使用更新的 WS 框架)工作得更好。我们很少看到像问题中提到的错误。