2

我以简单的方式定义了 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; }
}

我的问题如下。有没有办法只使用数据合同来做到这一点?我所有的操作都有 1 个参数。如果不是,我修改 AddRqst 的方式是不是最好的方式?

4

0 回答 0