从WCF调用REST服务

15

我对WCF不是很熟悉,但我想在尝试调用现有服务时学习它。

我考虑的REST API之一是Twitter API。 我打算开发一个WPF客户端,仅在屏幕上输出特定Twitter用户的最后5条推文。

我想知道是否有人可以简要概述在Visual Studio中使用WCF(类、向导、代理等)调用这些服务所需的步骤。 我已经知道如何使用Web请求调用它们并解析返回的XML - 我真的想看到WCF的工作部分。

提前感谢任何帮助推动我的教育的人 :)


如果教育是目的,考虑到WCF可能不是使用REST API的最合适框架。选择正确的工具才能做好工作,也许你在这里拿起了大锤,而你只需要一个螺丝刀...如果您需要建议,请阅读达雷尔的答案。 - Steve Casey
1
如果您需要更多关于如何为非WCF服务定义WCF合同的示例,可以参考这里:http://stackoverflow.com/questions/2180676/readasdatacontract-exception-while-reading-namespace/2180811#2180811 - Darrel Miller
2个回答

8

7
使用WCF来消费基于Http的API(如Twitter API)没有任何好处。使用System.Net.HttpWebRequest已经足够了。实际上,我怀疑你会遇到一些困难。当你在通信的两端都使用WCF时,WCF更容易工作。
然而,如果REST API返回Atom内容,则可以使用System.ServiceModel.Syndication类来帮助解析响应。
编辑: 自从我写这篇文章以来,微软发布了一个新的HTTP客户端库的预览版,它在消费RESTful服务方面做得更好。 以下是如何将其用于向Twitter发送POST请求的示例:
var client = new HttpClient();
client.DefaultHeaders.Authorization = Credential.CreateBasic("username","password");
var form = new HttpUrlEncodedForm();
form.Add("status","Test tweet using Microsoft.Http.HttpClient");
var content = HttpContent.Create(form);
var resp = client.Post("http://www.twitter.com/statuses/update.xml", content);

如果您想了解更多有关这个客户端库的详细信息,我正在撰写一些关于它的博客文章,可以在这里找到。


3
先生,你赢得了“最错”的奖项。创建用于表示远程数据的DataContracts,并让各种.NET序列化程序处理这些脏工作是一个巨大的优势。 - TheSoftwareJedi
通过使用 ASMX、WCF、System.ServiceModel.Web 和 P&P 的 Web Services 软件工厂来创建 Web 服务,以及过去一年来从事 REST 服务,我可以保证我的经验与你的说法不符。 - Darrel Miller
1
@TheSoftwareJedi 我向你发起挑战,要求你创建一个数据契约,能够成功地反序列化从Twitter API获取的XML响应。如果你发布了解决方案,我将删除我的答案。 - Darrel Miller
1
数据契约在处理xml时的功能非常有限。我赞同Darrel的观点,HttpWebRequest比处理整个WCF堆栈要容易得多,因为WCF无法反序列化许多xml内容,无论是混合内容、属性还是分散式可扩展性(命名空间)。 - SerialSeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接