【问题标题】:How to send a Get request to WCF service with complex parameter?如何使用复杂参数向 WCF 服务发送 Get 请求?
【发布时间】:2013-10-20 06:28:34
【问题描述】:

我正在将 SOAP WCF 服务移植到 REST。到目前为止,我发现接收复杂类型作为响应几乎不需要任何东西。但是,我的问题是请求也是复杂类型。它有 2 个字段,其中一个是字符串,另一个是另一个复杂类型的列表。

我想使它成为 WebGet,因为它基本上是一种搜索方法,它要求某些参数并返回结果。

我该怎么做呢?推荐/不推荐什么?

请注意,我在 WCF 方面没有太多经验,如果我遗漏了一些明显的东西,请道歉。

【问题讨论】:

  • 丢弃 WCF。使用 ASP.NET MVC WebApi
  • 你有没有考虑过用post来提交复杂类型?我相信可以发送一个复杂的,但不建议使用 get 动词。这个链接应该可以帮助你一些rest.elkstein.org/2008/02/more-complex-rest-requests.html
  • @Jonesy:这不是我的项目,我无法选择使用什么技术。
  • 使用 POST 代替 GET
  • @ermagana POST 不是很 REST。

标签: c# wcf http rest


【解决方案1】:

如果您想符合 REST 约定但保持相同的请求结构,您可能必须序列化复杂类型数组,对其进行 url 编码,并将其作为参数传递。这可能会生成很长的 URL,这可能是个问题。使用 POST 更实用,但正如 @Aron 所指出的,这与 REST 不一致,因为 POST 应该只用于更新,而不是查询。

与其尝试复制 SOAP 请求结构,我建议您考虑一下该服务正在做什么,并以一种可以巧妙地适合参数的方式重新构思输入选项。如果您将此接口公开给第三方,那么无论您如何表达,他们都会对复杂类型的数组感到困惑。

【讨论】:

  • 或者服务的功能可能不适合对资源进行操作。
【解决方案2】:

根据您的反馈并考虑到您无法控制执行实际工作的类这一事实,这是我的建议:

使用一个帖子到那个端点,复杂的查询。确实,它没有遵循休息信,但它更接近于使用 https 动词,没有人应该为此敲你。

您还应该考虑为旧 SOAP 架构中的方法定义单独的端点,以减少故障点。这种方法更接近于 RPC、远程过程调用,但这比 SOAP 是 POX、普通的旧 xml 更好。

希望这会有所帮助,顺便说一下,如果您阅读了菲尔丁关于 REST 的论文,那么在您还实现超媒体之前,您还不能完全了解 REST,但这是一个固执己见的主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多