【问题标题】:POST Multiple Parameters to WCF ServicePOST 多个参数到 WCF 服务
【发布时间】:2011-02-06 14:44:40
【问题描述】:

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

谢谢!

【问题讨论】:

  • 这闻起来像你之前问题的第二个版本:)

标签: c# wcf


【解决方案1】:

是的,但您的 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 反序列化到您的合约对象中,此时您可以像使用任何其他类一样使用它。

【讨论】:

  • 第一段示例代码中缺少右方括号
【解决方案2】:

似乎 wcf(这是微软对网络编程的整体抽象的名称)和特定协议 HTTP 之间存在一些混淆,该协议定义了诸如“POST”和“GET”之类的动词,即 wcf将用于交流。

当您定义 wcf 服务操作并使用 [WebInvoke] 对其进行属性时,您将使用 REST over HTTP 访问该服务。更多细节见webinvoke,不过评论总结得很好

WebInvokeAttribute 属性是 应用于服务操作 除了 OperationContract 属性和 将操作与 UriTemplate 以及底层 表示一个运输动词 调用(例如,HTTP POST, 放置或删除)。这 WebInvokeAttribute 属性是一个 被动操作行为( IOperationBehavior 方法什么都不做) 将元数据添加到操作中 描述。应用 WebInvokeAttribute 属性 服务操作没有效果,除非 寻找这个的行为 操作描述中的元数据 (如WebHttpBehavior)被添加到 服务的行为集合。这 WebInvokeAttribute 确定什么 服务操作的 HTTP 方法 回应。默认情况下,所有方法 具有 WebInvokeAttribute 应用响应 POST 请求。

本文还进一步定义了如何将值映射到您的服务合同。有点像..

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

编辑:为了让这个领域的新手更了解这一点。

【讨论】:

  • 由于 Taylor 覆盖了 POST 主体,因此可以通过 Uri 访问
  • +1,很好的补充,忘记了。我通常会无缘无故地避免通过查询字符串进行 POST,但在许多情况下这同样合适
  • 你能把这两种方法结合起来吗?例如URI 为 Mod?x={x}&y={y} 的方法,它以 SomeObject 的形式发布数据?所以签名看起来像:long Mod(long x, long y, SomeObject data)
猜你喜欢
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多