WCF中的可互操作串行器

时间:2015-09-15 21:55:08

标签: c# wcf datacontractserializer messagecontract

我以简单的方式定义了WCF服务操作,如

[ServiceContract(Namespace = "http://contoso.com")]
interface ICalculator
{
  [OperationContract]
  AddResp Add(AddRqst addRequestDummyName);
}

其中AddRqst定义为

[DataContract]
class AddRqst
{
    [DataMember]
    public decimal A { get; set; }
    [DataMember]
    public decimal B { get; set; }
}

我看到的问题是WCF序列化的方式和它所期望的请求的方式被参数名称包裹起来(这是来自内存)

<Add>
  <addRequestDummyName>
     <A>1</A>
     <B>1.5</B>
  </addRequestDummyName>
</Add>

我无法为此文件分发架构,因为WCF喜欢添加并期望参数的额外包装器。它看起来应该像我设计的那样,

<Add>
   <A>1</A>
   <B>1.5</B>
</Add>

我知道MessageContract并且我已经通过将AddRqst(以及AddResp)更改为以下内容来测试,因为通过使用messagecontracts,您只需要1个合约。

[DataContract]
[MessageContract]
class AddRqst
{
    [DataMember]
    [MessageBodyMember]
    public decimal A { get; set; }
    [DataMember]
    [MessageBodyMember]
    public decimal B { get; set; }
}

我的问题如下。有没有办法只使用datacontracts这样做?我的所有操作都有1个参数。如果没有,我修改AddRqst的方式是最好的方法吗?

0 个答案:

没有答案