2013-09-27 49 views
1

我已经设置了一个服务引用(WCF客户端)来从我设置用于测试的控制台应用程序调用Java Web服务。它使用HTTPS。我有Fiddler设置,可以看到从服务发送和返回的正确值(在Fiddler中)。但是不管我调用什么方法,返回的值,无论它是一个String还是一个对象,都会返回为Null。WCF客户端没有映射和返回空对象

我不确定代理客户端映射是否无效,或者是否需要更改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(); 

     } 

在这段代码中的变量结果为空,甚至当你在看提琴手可以看到XML虽然。直到您尝试使用结果时才显示错误。

顺便说一句,我试着在代理类reference.cs中的latestResults方法中设置一个断点,但调试器没有达到它。

+0

听起来像一个反序列化问题,远程模式已更改并且使'ResultsBatch'代理类无效? – James

+0

这是一个新的设置。我同意这听起来像一个反序列化问题。由于代理类中的断点未达到,故障排除的最佳方式是什么? – Josh

+0

你是说你可以使用fiddler看到正确的回答吗? –

回答

1

您可能想要配置并启用WCF诊断事件跟踪和消息日志记录,然后重新运行测试事务并查看服务跟踪日志文件。以下链接演示如何启用跟踪和消息日志记录。

http://msdn.microsoft.com/en-us/library/ms751526.aspx

根据我们的经验,服务不符,否则没有显示出明显的错误,往往在服务跟踪文件中显示出来。

注:代理类reference.cs内的断点可能无法达到的,因为下面的属性已设置:

[System.Diagnostics.DebuggerStepThroughAttribute()] 
0

最有可能的WSDL有错误和架构里面不匹配实际响应XML。您可以在这里将WSDL(以及任何引用的XSD)与SOAP响应一起发布(或将它们邮寄给我,以便我尝试查看)。或者,您可以使用完全相同的WSDL(或您已经生成的客户端协议)设置WCF服务存根,并将WCF发送的响应与实际服务发送的响应进行比较。 您想查找XML名称空间的差异(并理解诸如默认名称空间或前缀之类的微妙部分)以及正文下的第一个元素的名称。