【问题标题】:At client side, return value of WCF Operation Contract is null ! Any solution?在客户端,WCF Operation Contract 的返回值为 null !有什么解决办法吗?
【发布时间】:2011-03-25 12:47:11
【问题描述】:

我的 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 不会给出任何红色/错误标记! 会出现什么问题?

【问题讨论】:

  • @Aliostad :对不起,我发布问题时没有添加代码。希望对现在的回答有所帮助。

标签: wcf


【解决方案1】:

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

因此,您需要确定客户期望肥皂消息如何形成..

【讨论】:

  • 您的回复很有帮助。谢谢你。我赞成你的回答!我对 WCF 很陌生。你能告诉我识别客户端期望的 SOAP 消息格式的简单方法吗?是否可以通过查看 WSDL 或客户端代理类来识别它?
  • 是的,可以通过查看代码来确定客户端应用程序如何期待 Soap 消息。但是,我遵循的最简单的方法是从 WSDL 创建服务存根(使用 WSDl.exe /serverInterface)并从中创建服务。创建服务后,只需在 IE 中浏览服务并单击操作即可。它应该列出预期的请求和响应肥皂消息。 HTH - 阿米特
  • 接受您的回复作为答案并进一步编辑以提及解决方案。
【解决方案2】:

您可以按照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>

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

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 2019-02-05
    • 1970-01-01
    • 2016-12-28
    • 2021-04-13
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多