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