DataContractSerializer输出与相同数据协定的SOAP正文XML不匹配 [英] DataContractSerializer output does not match SOAP body XML for same data contract

查看:64
本文介绍了DataContractSerializer输出与相同数据协定的SOAP正文XML不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

朋友:

我遇到的情况是我有一个使用BasicHttpBinding的WCF服务,并且当我调用具有给定协定的方法时,contarct看起来像这样:(为简洁起见,这里只是显示SOAP正文)

I have a situation where I have a WCF service using BasicHttpBinding, and when I call a method with a given contract, the contarct looks like this over the wire: (just showing the SOAP body here for brevity)

  < s:Body>
    < BalanceInquiry xmlns ="-某些命名空间-"
      < request xmlns:a =" http://schemas.datacontract.org/2004/07/App.Data" xmlns:i ="http://www.w3.org/2001/XMLSchema-instance">
        < a:帐户>
          < a:AccountNumber> 1029292929</a:AccountNumber>
          < a:Track1>-跟踪1-</a:Track1>
          < a:Track2>-轨道2-</a:Track2>
        </a:帐户>
      </request>
    </BalanceInquiry>
  </s:Body>

  <s:Body>
    <BalanceInquiry xmlns="--some namespace--">
      <request xmlns:a="http://schemas.datacontract.org/2004/07/App.Data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Account>
          <a:AccountNumber>1029292929</a:AccountNumber>
          <a:Track1>--Track1--</a:Track1>
          <a:Track2>--Track2--</a:Track2>
        </a:Account>
      </request>
    </BalanceInquiry>
  </s:Body>

但是当我在代码中(例如在控制台应用程序中)使用DataContractSerializer序列化完全相同的合同时,我得到了:

But when I serialize the exact same contract with DataContractSerializer in code (e.g. in a console application), I get this:

< RequestMessage xmlns:i = \"http://www.w3.org/2001/XMLSchema-instance \" xmlns = \"http://schemas.datacontract.org/2004/07/App.Data \">< Account>< AccountNumber> 1029292929</AccountNumber< Track1>-Track1-< ;/Track1>< Track2>-Track2-</Track2></Account></RequestMessage>

<RequestMessage xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/App.Data\"><Account><AccountNumber>1029292929</AccountNumber><Track1>--Track1--</Track1><Track2>--Track2--</Track2></Account></RequestMessage>

这两种情况下的合同类都是相同的,并且DataContract类的类型名称是RequestMessage,而不是"BalanceInquiry",这是操作合同方法的名称.

The contract class is the same in both cases, and the type name of the DataContract class is RequestMessage, NOT "BalanceInquiry", which is the name of the operation contract method.

有人知道吗?出于特定原因,我需要能够在代码中重复序列化.

Does anyone know about this? I need to be able to duplicate serialization in code for a very specific reason.

推荐答案

您好RodKestler,

SOAP正文的结构为正文->操作合同方法->数据合同类. DataContractSerializer使用提供的数据协定将类型的实例序列化和反序列化为XML流或文档. 仅包含数据合同类.

The structure of SOAP body is Body->Operation Contract method->Data Contract class. DataContractSerializer serializes and deserializes an instance of a type into an XML stream or document using a supplied data contract which will only contains data contract class.

您是否要更改WCF Soap主体的序列化?如果是这样,您的预期结果是什么?如果您想从SOAP删除Operation Contract方法,我认为这是不可能的,否则,您的服务将不适用于 缺少操作方法.

Do you mean you want to change the serialization of WCF Soap body? If so, what is your expected result? If you want to remove the Operation Contract method from SOAP, I think it is impossible, otherwise, your service would not work for missing operation method.

最好的问候

爱德华


这篇关于DataContractSerializer输出与相同数据协定的SOAP正文XML不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆