将多个参数POST到WCF服务

我想了解WCF,所以我的问题可能很愚蠢。 我相信我对“GET”操作有着坚定的理解。 我现在正在进行一些“POST”操作。 我的问题是,我可以使用WebInvoke编写一个接受多个参数的WCF服务操作吗? 或者,当我发布数据时,它是否只接受一个序列化参数?

谢谢!

是的,但是你的POST必须使用对数据的共同理解,即“数据合同”。

在WCF中,这里的典型方法是你创建一个契约类(只是一个非常好的例子,而不是100%工作))

[DataContract(Namespace="http://yournamespace.com")] public class MyContract { [DataMember(Order=1)] public string MyData1 { get(); set{};} [DataMember(order=2)] public string MyData2 { get(); set{};} } 

然后,您将指定WCF操作以接受该合同类型作为其参数

 [WebInvoke(method="POST")] public string DoSomethingFromPost(MyContract postedData) { } 

在您的客户端上,您将数据序列化为与您的合同匹配的xml / json。 再次,松散的例子:

  value value  

当合同匹配时,WCF会将您的POST反序列化到您的合同对象中,此时您可以像任何其他类一样使用它。

看起来wcf(这是微软网络编程的整体抽象的名称)和特定的协议HTTP之间存在一些混淆,它定义了像“POST”和“GET”这样的动词,wcf将用于通信。

当您定义wcf服务操作并使用[WebInvoke]将其归属时,您将使用REST over HTTP访问该服务。 有关详细信息,请参阅webinvoke ,但这些评论总结得很好

除了OperationContractAttribute之外,WebInvokeAttribute属性还应用于服务操作,并将操作与UriTemplate以及表示调用的基础传输动词(例如,HTTP POST,PUT或DELETE)相关联。 WebInvokeAttribute属性是一种被动操作行为(IOperationBehavior方法不执行任何操作),它将元数据添加到操作描述中。 除非将在操作描述中查找此元数据的行为(例如WebHttpBehavior)添加到服务的行为集合中,否则将WebInvokeAttribute属性应用于服务操作无效。 WebInvokeAttribute确定服务操作响应的HTTP方法。 默认情况下,应用了WebInvokeAttribute的所有方法都会响应POST请求。

此外,本文还定义了如何将值映射到服务合同。 就像是..

 [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "Mod?x={x}&y={y}")] long Mod(long x, long y); 

编辑:为这个领域的新人提供更多信息。

  • 在不进入平台细节的情况下介绍REST 。
  • 以及如何使用wcf设置简单的REST样式wcf服务