将多个参数POST到WCF服务

时间:2011-02-06 14:44:41

标签: c# wcf

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

谢谢!

2 个答案:

答案 0 :(得分:7)

是的,但是您的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。再一次,松散的例子:

<MyContract xmlns="http://yournamespace.com">
<MyData1>value</MyData1>
<MyData2>value</MyData2>
</MyContract>

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

答案 1 :(得分:7)

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

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

  

WebInvokeAttribute属性是   适用于中国的服务业务   除了   OperationContractAttribute和   将操作与a关联   UriTemplate以及底层证券   代表一个的运输动词   调用(例如,HTTP POST,   PUT,或删除)。该   WebInvokeAttribute属性是一个   被动操作行为(   IOperationBehavior方法什么都不做)   这会为操作添加元数据   描述。应用   WebInvokeAttribute属性为   除非服务操作无效   寻找此事的行为   操作说明中的元数据   (例如WebHttpBehavior)被添加到   服务的行为集合。该   WebInvokeAttribute确定了什么   HTTP方法即服务操作   回应。默认情况下,所有方法   具有WebInvokeAttribute的   应用响应POST请求。

本文还介绍了如何将值映射到服务合同。像...这样的东西。

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

编辑:为新手提供更多信息。