c# - 有什么轻松的方法可以创建发布 url 格式请求的 WCF REST 客户端?

标签 c# wcf rest proxy

这是 http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/94503037-9cc4-494d-88af-4e97fcb9cdcc 的副本,但我在那里获得富有成效的答案并没有取得多大成功。 :(

我一直在努力寻找有关从 ChannelFactory 获得一个不错的具体 REST 服务客户端(代理)的信息。

据我所知,您可以在客户端界面上设置属性,告诉 WCF 使用 XML(DataContract 或 XmlSerialization)或 JSON 进行响应,以及 URL 格式的 HTTP get 请求或 XML/JSON 的 HTTP post。 [从原始编辑]当然,以编程方式或通过配置提供不同的绑定(bind)配置。 [/从原文编辑]

我想要的是在服务接口(interface)上放置一些属性,告诉 WCF 创建一个 URL 格式的 POST,没有 XML header ,然后获得 XML 格式的响应。 (例如) [从原始编辑] 和/或提供支持以下内容的 BCL 绑定(bind) [/从原始编辑]

理想的场景是这样的:

public interface IRestClient
{
    [WebInvoke]
    AuthResponse Authorize(
        [HeaderParameter]
        string someHeader,
        string someData, 
        int someInt)
}

// ...

var client = channelFactory.CreateChannel<IRestClient>(); // whatever bindings I'd need for this

var response = client.Authorize("abc", "def", 123);

并让 client.Authorize 实际执行

HTTP POST /authorize
someHeader: abc
someData=def&someInt=123

反序列化

<AuthResponse>
    <Message>Hi there!</Message>
</AuthResponse>

据我从谷歌搜索和论坛上的讨论中发现,除非你做大量的管道工作,编写拦截器、格式化程序和天知道什么,否则没有办法做到这一点。

WCF 贡献库、WCF 示例等。阿尔。太学术了,有太多的管道和/或太少的直观文档,我无法毫不费力地做到这一点。 :)

关于在哪里可以找到执行此操作的最简单方法的任何提示?

(请不要告诉我使用 HttpRequestWebClient,这就是为什么我们有 ChannelFactory!;))

[更新]

如果我错了请纠正我,但据我所知,许多所谓的 REST API 需要 URL 格式的请求,而不是 Json 或 Xml。

基于 Web 的服务接口(interface)的 WCF 解释反射(reflect)了方法定义上的 WebGetWebInvoke 属性,以确定如何调用“服务”上的每个“方法”。 (为简单起见,我将其称为方法和服务)

WebInvoke 属性采用 WebRequestFormat 枚举值来确定如何序列化请求。该枚举只有 Json 和 Xml。

我觉得这是一个枚举,而不是指向格式化程序/序列化程序工厂的指针,甚至不是具体的 said,这对我来说真的很愚蠢。

所以,这个问题真的归结为最简单的,最好是已经实现的,覆盖请求的序列化。

[/update]

最佳答案

REST 没有元数据标准。因此,您将不得不使用众多客户端 REST 工具包之一或 BCL 中的基本 HTTP API 自己滚动客户端代码。您可以使用 WebChannelFactory 定义与 WebInvoke、WebGet 的接口(interface),但您必须自己编写或获取服务的副本。

通常在 REST API 中,API 应该根据 URI 动态发现,因为资源还应该返回适​​用于您的交互或资源的当前状态的相关 URI 和动词

关于c# - 有什么轻松的方法可以创建发布 url 格式请求的 WCF REST 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9363869/

相关文章:

c# - 在 C# 中合并配置文件(或 XML)

c# - 响应全透明面板上的按键和鼠标点击

wcf - 何时使用 WCF ChannelFactory 而不是服务引用

java - 将动态应用程序部署到 Eclipse 上的 Tomcat 服务器后,Spring Web REST API 的 HTTP 状态 404

javascript - 如何在 Jasmin 中使用剩余调用来测试 AngularJS 服务

rest - 如何将工作项作为子项添加到父项?

c# - 每天早上 7 点调用 Web 服务方法

java - 高效地通过 SQL 数据库进行部分搜索

c# - 回收 Worker 进程对 WCF 服务的影响

c# - Windows服务之间如何通信