我已经设置了一个服务引用(WCF客户端)来从我已设置进行测试的控制台应用程序调用Java Web服务。它使用HTTPS。我有Fiddler设置,可以看到从服务发送和返回的正确值(在Fiddler中)。但无论我调用什么方法,返回的值,无论是String还是对象,都会返回Null。
我不确定代理客户端映射是否正常工作,或者我是否需要在app.config中更改配置值。
的app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="ResultsSOAP12Binding">
<textMessageEncoding messageVersion="Soap12" />
</binding>
<binding name="ResultsSOAP12Binding1">
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport />
</binding>
<binding name="ResultsSOAP12Binding2">
<textMessageEncoding messageVersion="Soap12" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://services.acme.com/results"
binding="customBinding" bindingConfiguration="ResultsSOAP12Binding1"
contract="ResultsServiceReference.Result
</client>
</system.serviceModel>
</configuration>
代码:
static void CallResults()
{
var resultsRequest = new ResultsServiceReference.ResultsRequest();
var client = new ResultsServiceReference.ResultsPortTypeClient("ResultsSOAP12BindingQSPort");
Console.WriteLine("Call Results Service");
ResultsServiceReference.ResultsBatch result = client.latestResults(resultsRequest);
Console.WriteLine(result.Status);
Console.ReadLine();
}
在此代码中,变量结果为空,即使您在Fiddler中查看时也可以看到XML。在尝试使用结果之前不会显示错误。
BTW,我尝试在代理类reference.cs中的latestResults方法中设置断点,但是调试器没有达到它。
答案 0 :(得分:1)
您可能希望配置和启用WCF诊断事件跟踪和消息记录,然后重新运行测试事务并查看服务跟踪日志文件。以下链接演示了如何启用跟踪和消息日志记录。
http://msdn.microsoft.com/en-us/library/ms751526.aspx
根据我们的经验,服务差异(否则显示没有明显错误)通常会显示在服务跟踪文件中。
注意:可能无法访问代理类reference.cs中的断点,因为已设置以下属性:
[System.Diagnostics.DebuggerStepThroughAttribute()]
答案 1 :(得分:0)
很可能WSDL有一个错误,其中的模式与实际的响应XML不匹配。您可以在此处将WSDL(以及任何引用的XSD)与SOAP响应一起发布(或将它们发送给我,以便我尝试查看)。或者,您可以从完全相同的WSDL(或您已生成的客户端协定)设置WCF服务存根,并将WCF发送的响应与实际服务发送的响应进行比较。 您希望在XML名称空间中查找差异(并理解精细部分,如果这是默认名称空间或前缀名称),并且在主体下面的第一个元素的名称中。