我正在从网址上使用网络服务。当我使用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();
}
}
答案 0 :(得分:3)
在类似情况下,我将从以下内容开始:
使用WCF客户端进行测试并捕获跟踪文件:
使用soapUI客户端进行测试并捕获Http Log
获得两个客户端的跟踪信息后,您应该能够比较事务并希望确定问题的根源。特别是,我建议双方确认服务地址,然后比较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)
检查邮件配额设置,可能是您的服务发送的内容多于配置