WCF Web服务调用超时

时间:2014-02-27 17:16:36

标签: c# .net web-services wcf wsdl

我正在从网址上使用网络服务。当我使用SoapUI测试时,我立即得到响应(见下图),我发出的请求数据通过了另一端。

所以在我的C#应用​​程序中我做了同样的事情,我使用了web服务wsdl并自动生成了代理类。我基于该代理类创建了一个请求,其中包含我在SoapUI中使用的完全相同的请求数据并发送出去。我确认在另一端他们成功收到我的数据,没有显示错误。

但是,我从来没有收到任何ID,过了一段时间我会得到这个例外:

  

错误对' http://someURLWebservice.com/WSoperation'的HTTP请求已超过分配的超时00:00:59.9470000。分配给此操作的时间可能是较长超时的一部分。

我在这里遗漏了什么吗?我下载了WSDL并使用SoapUI生成了模拟服务,如果我在本地调用该模拟Web服务,我会立即得到它。该ID立即返回。

这是我的代码:

 string serverURL = Settings.Default.ExtensionServiceURL;

 //Get Proxy class client
 ext.ExtWSPortTypeClient client = new ext.ExtWSPortTypeClient();
 EndpointAddress addr = new EndpointAddress(serverURL);

 try
   {
      client.Endpoint.Address = addr;
      Uri site = new Uri(serverURL);
      client.Endpoint.ListenUri = site;
      ExtensionData eData = new ExtensionData();
      client.ChannelFactory.CreateChannel();

      Console.WriteLine("Sending Locator Event Request to Web Service");
      ext.locatorEventResponse1 resp = await client.locatorEventAsync(eData.GenerateLocatorEventRequest(ev));
   }
   catch (Exception ex)
   {
       Console.WriteLine("Error " + ex.Message);
   }
   finally
   {
       if (client != null)
       {
          ((ICommunicationObject)client).Close();
       }
   }

enter image description here

3 个答案:

答案 0 :(得分:3)

在类似情况下,我将从以下内容开始:

使用WCF客户端进行测试并捕获跟踪文件:

使用soapUI客户端进行测试并捕获Http Log

  • 清除soapUI http日志(底部的一个标签)
  • 通过soapUI测试请求发送消息
  • 保存Http日志

获得两个客户端的跟踪信息后,您应该能够比较事务并希望确定问题的根源。特别是,我建议双方确认服务地址,然后比较SOAP信封,以确保WCF绑定与soapUI设置一致。

此外,您还可以使用Fiddler查看Web服务通信。以下SO帖子提供了很好的参考链接。 Fiddler and Monitoring Web Service Traffic

希望这有帮助。
的问候,

答案 1 :(得分:3)

所以我最终配置Fiddler2来嗅探我的SoapUI请求并将其与我的应用程序请求进行比较。在Application request标题中,我看到了以下内容:

Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Host: engage.ext-inc.com
Content-Length: 1036
**Expect: 100-continue**

那个Expect:100-continue不在SoapUI请求中,该请求成功发出并获得了响应。考虑到这一点,我在Fiddler中接受了SoapUI请求并在其上构建了一个新的基础...除了我放入Expect:100-continue并猜测什么,我没有得到任何响应。

阅读相关信息后,我发现了link

瞧,ServicePointManager.Expect100Continue = false;在进行Web服务调用之前进入我的代码我立即收到回复。

答案 2 :(得分:0)

检查邮件配额设置,可能是您的服务发送的内容多于配置