Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在客户端,WCF运营合同返回值为空!有解决办法吗?_Wcf - Fatal编程技术网

在客户端,WCF运营合同返回值为空!有解决办法吗?

在客户端,WCF运营合同返回值为空!有解决办法吗?,wcf,Wcf,我的WCF服务中有一个操作契约,它返回类的一个实例,该实例实际上是一个消息契约。(不是数据合同)。消息协定具有属性为>[MessageBodyMember]的属性 [MessageContract(WrapperName="AuthorizarionResponse", IsWrapped="true")] public class AuthorizationResponse { [MessageBodyMember] public string role {get;set;}; [Me

我的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);          

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

但是在客户端,我得到了空值

一切都结束了,没有任何异常/错误。Fiddler2没有给出任何红色/错误标记!
会出现什么问题?

问题是服务发送的回复soap消息的格式与客户端合同代码的格式不符。序列化程序根据客户端应用程序中的代理代码中定义的约定解析Soap消息,但是,如果收到的Soap消息不是预期的,序列化程序将自动跳过内容并向前移动。所以,并没有错误,并且对象也并没有被填充,因为序列化程序并没有找到预期的内容


所以,您需要确定客户端希望soap消息是如何形成的。

您可以按照所述启用跟踪日志记录



然后使用
C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\bin
中的
SvcTraceViewer.exe
或其同级文件夹之一

@Aliostad:对不起,我在发布问题时没有添加代码。希望这对现在的回答有帮助。你的回答很有帮助。谢谢你。我投票赞成你的答案!我是WCF的新手。您能告诉我一种简单的方法来识别客户端所期望的SOAP消息格式吗?通过查看WSDL或客户端代理类可以识别Soap消息吗?是的,通过查看代码可以识别客户端应用程序期望Soap消息的方式。然而,我遵循的最简单的方法是从WSDL创建服务存根(使用WSDL.exe/serverInterface)并从中创建服务。创建服务后,只需在IE中浏览服务并单击操作。它应该列出预期的请求和响应soap消息。HTH-AMITA将您的回答作为答案,并进一步编辑以提及解决方案。
<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>