我正在尝试理解WCF,所以我的问题可能很愚蠢。我相信我对“GET”操作有着坚定的理解。我现在正在进行一些“POST”操作。我的问题是,我可以使用WebInvoke编写一个接受多个参数的WCF服务操作吗?或者,当我发布数据时,它是否只接受一个序列化参数?
谢谢!
答案 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);
编辑:为新手提供更多信息。