将多个参数POST到WCF服务

use*_*662 9 c# wcf

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

谢谢!

Tay*_*ird 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{};}

}
Run Code Online (Sandbox Code Playgroud)

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

[WebInvoke(method="POST")]
public string DoSomethingFromPost(MyContract postedData)
{
}
Run Code Online (Sandbox Code Playgroud)

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

<MyContract xmlns="http://yournamespace.com">
<MyData1>value</MyData1>
<MyData2>value</MyData2>
</MyContract>
Run Code Online (Sandbox Code Playgroud)

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


alm*_*ori 7

似乎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);
Run Code Online (Sandbox Code Playgroud)

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