客户端如何将参数传递给RESTful WCF服务

客户端如何将参数传递给RESTful WCF服务,wcf,rest,wcf-client,wcf-rest,restsharp,Wcf,Rest,Wcf Client,Wcf Rest,Restsharp,我正在使用以下两种方法构建RESTful服务注意:我已将AspNetCompatibilityMode设置为true: [WebInvoke] string TestMethodA() { string test = HttpContext.Current.Request.Form["xml"]; } [WebInvoke] string TestMethodB(string res) { string xml = res; } 现在,在构建客户端以便将参数传

我正在使用以下两种方法构建RESTful服务注意:我已将AspNetCompatibilityMode设置为true:

[WebInvoke]
string TestMethodA()
{
        string test = HttpContext.Current.Request.Form["xml"];
}

[WebInvoke]
string TestMethodB(string res)
{
        string xml = res;
}
现在,在构建客户端以便将参数传递给MethodA时,我将执行以下操作:

request.AddParameter("xmlString", HttpUtility.HtmlEncode(requestBody));
request.AddParameter("text/xml",requestBody, ParameterType.RequestBody);
为了向MethodB发送消息,我执行以下操作:

request.AddParameter("xmlString", HttpUtility.HtmlEncode(requestBody));
request.AddParameter("text/xml",requestBody, ParameterType.RequestBody);
现在的问题是:

客户机如何知道如何传递参数?客户端不知道服务器实现


发送请求的客户端正在使用RestSharp Api。

由于MethodB采用字符串,WCF不知道它应该是什么样子。它可以是XML、JSON、自由文本等等。在您的实现中,您只需要记录如何格式化请求,并将其提供给实现客户机的人

更好的方法是创建一个C对象,用适当的序列化属性标记它,并将其用作MethodB的参数。例如:

[DataContract]
public class MyDataContract{

    [DataMember]
    public string SomeString{get;set;}

    [DataMember]
    public int SomeNumber{get;set;}    
}

public void MethodB(MyDataContract arguments){
  //do stuff

}

这将允许WCF基础设施自动解析参数。您还可以让WCF从中自动生成帮助文档。

由于MethodB使用字符串,WCF不知道它应该是什么样子。它可以是XML、JSON、自由文本等等。在您的实现中,您只需要记录如何格式化请求,并将其提供给实现客户机的人

更好的方法是创建一个C对象,用适当的序列化属性标记它,并将其用作MethodB的参数。例如:

[DataContract]
public class MyDataContract{

    [DataMember]
    public string SomeString{get;set;}

    [DataMember]
    public int SomeNumber{get;set;}    
}

public void MethodB(MyDataContract arguments){
  //do stuff

}

这将允许WCF基础设施自动解析参数。您还可以使用WCF自动生成帮助文档。

您的服务了解基础设施,在这种情况下,HTTP可以查看请求正文,这通常并不理想。为什么不让TestMethodA接受一个字符串,然后总是以同样的方式调用您的方法呢?这样,即使您的服务未托管在http绑定上,您的客户机也可以使用一种方法来知道如何调用服务。您的服务了解基础结构,在这种情况下,http可以查看请求主体,这通常并不理想。为什么不让TestMethodA接受一个字符串,然后总是以同样的方式调用您的方法呢?这样,即使您的服务没有托管在http绑定上,并且您的客户机只有一种方式需要知道如何调用该服务,您的服务也可以工作。