我以简单的方式定义了 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 的方式是不是最好的方式?