【发布时间】:2013-09-27 20:45:23
【问题描述】:
我已经设置了一个服务引用(WCF 客户端)来从我设置的用于测试的控制台应用程序调用 Java Web 服务。它正在使用 HTTPS。我有 Fiddler 设置,可以看到从服务(在 Fiddler 中)发送和返回的正确值。但是无论我调用什么方法,返回的值,无论是字符串还是对象,都以 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();
}
在此代码中,变量 result 为空,即使您在 Fiddler 中查看时也可以看到 XML。在您尝试使用结果之前不会显示错误。
顺便说一句,我尝试在代理类 reference.cs 的 latestResults 方法中设置断点,但调试器没有到达它。
【问题讨论】:
-
听起来像是反序列化问题,远程架构是否已更改并使您的
ResultsBatch代理类无效? -
这是一个新设置。我同意这听起来像是一个反序列化问题。由于未到达代理类中的断点,排除故障的最佳方法是什么?
-
您的意思是您可以使用 fiddler 看到正确的响应吗?
-
代理是从 WSDL 文件生成的。如果 WSDL 不正确,这是预期的行为。您是否验证了您的 WSDL?
-
是的,我可以在 Fiddler 中看到正确的响应。是的,WSDL 是有效的,并且已经在非 WCF 消费者中使用了几年。