下面是我的合同和OperationContracts,我的问题是,当我使用WebGet属性到我的服务工作正常的所有方法时,当我将WebGet属性移除给任何一个收到以下错误的OperationContracts时。
操作“IDemo”的“ProductDetails”指定要序列化的多个请求正文参数,而不包含任何包装器元素。最多可以在没有包装器元素的情况下序列化一个body参数。要么删除额外的主体参数,要么将WebGetAttribute/WebInvokeAttribute上的BodyStyle属性设置为body。
这些是我的方法
string AddNumbers(int x,int y); --- using [WebGet]
string SubtractNumbers(int x, int y); -- using [WebGet]
String ProductDetails(string sName, int cost, int Quntity, string binding); -- not using using [WebGet]
CompositeType GetDataUsingDataContract(CompositeType composite); -- not using [WebGet]如果我们选择[WebGet],是否必须将WebHttpbinding属性包含到所有操作合同中?
public interface IService1
{
[OperationContract]
string GetData(int value,string binding);
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "/Add?num1={x}&num2={y}")]
string AddNumbers(int x,int y);
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "/Subtract?num1={x}&num2={y}")]
string SubtractNumbers(int x, int y);
[OperationContract]
String ProductDetails(string sName, int cost, int Quntity, string binding);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}发布于 2011-05-06 05:20:30
错误消息确实准确地说明了问题所在:
操作“IDemo”的“ProductDetails”指定要序列化的多个请求正文参数,而不包含任何包装器元素。最多可以在没有包装器元素的情况下序列化一个body参数。
除非对这些参数进行包装,否则不能有期望获得多个参数的方法,例如,通过在BodyStyle属性中指定WebGet设置。
是的:要么您必须对REST服务的每个方法应用一个[WebGet],要么您可以重新组织您的方法以只接受一个参数(例如,将您现在拥有的两个或三个参数封装到一个包含这些多个参数的单个类中,然后传入该请求类的一个对象实例)。
[DataContract]
public class AddNumbersRequest
{
[DataMember]
public int X { get; set; }
[DataMember]
public int Y { get; set; }
}
[OperationContract]
string AddNumbers(AddNumbersRequest request);https://stackoverflow.com/questions/5906996
复制相似问题