在客户端,WCF Operation Contract的返回值为null!有解决方案吗

时间:2011-03-25 12:47:12

标签: wcf

我的WCF服务中有一个操作合同,它返回一个实际上是消息合同的类的实例。 (不是数据合同)。消息合约具有属性>的属性。 [MessageBodyMember]

[MessageContract(WrapperName="AuthorizarionResponse", IsWrapped="true")]
public class AuthorizationResponse
{
  [MessageBodyMember] public string role {get;set;};
  [MessageBodyMember] public Organization organization {get; set;};
}

[ServiceContract]
interface IAuthorization
{
    [OperationContract]
    public AuthoriztionResponse GetAuthorizationResult(AuthorizationRequestMessage request);          

}

Organization类使用XmlSerializer。它不使用DataContract,因为我希望从现有的ASMX客户端使用WCF服务。 当我调试服务并在Operation Contract方法中看到返回值时,我可以看到我希望通过此操作合同从服务返回的所有内容。

但在客户端,我得到空值!

一切都在没有任何异常/错误的情况下结束。 Fiddler2不会给出任何红色/错误标记! 怎么会出错?

2 个答案:

答案 0 :(得分:3)

问题是服务发送的回复肥皂消息未按客户合同代码的预期形成。序列化程序根据客户端应用程序中代理代码中定义的Contract解析Soap消息,但是,如果收到的soap消息不符合预期,则序列化程序会静默跳过内容并继续前进。因此,没有错误,也没有填充对象,因为序列化程序没有找到预期的内容。

因此,您需要确定客户期望肥皂消息的形成方式。

答案 1 :(得分:1)

您可以按照here

所述启用跟踪日志记录
<system.diagnostics>
    <sources>
        <source     name="System.ServiceModel"
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
            <listeners>
                <add    name="traceListener"
                        type="System.Diagnostics.XmlWriterTraceListener"
                        initializeData= "c:\wcf.svclog" />
            </listeners>
        </source>
    </sources>
</system.diagnostics>

然后使用SvcTraceViewer.exe或其中一个兄弟文件夹

中的C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin