Использование службы REST из WCF

Я не так хорошо знаком с WCF, но думал, что научусь, пытаясь использовать существующую службу.

Один из REST API, о котором я подумал, был Twitter API. Я подумал о разработке клиента WPF, который будет просто выводить на экран последние 5 твитов определенного пользователя Twitter.

Мне было интересно, может ли кто-нибудь вкратце описать шаги, которые мне нужно предпринять в Visual Studio для использования этих сервисов с использованием WCF (классы, мастера, прокси и т. Д.). Я уже знаю, как просто вызвать их с помощью веб-запроса и проанализировать XML, который возвращается - я действительно хочу увидеть работу WCF.

Заранее спасибо любому, кто помогает мне в дальнейшем обучении :)


person Traveling Tech Guy    schedule 07.11.2008    source источник
comment
Если целью является образование, учтите, что WCF может быть не самой подходящей средой для ПОТРЕБЛЕНИЯ REST API. правильный инструмент для правильной работы, и вы, возможно, взяли здесь кувалду, когда все, что вам нужно, это отвертка ... если вам нужен совет, прочитайте ответ Даррела.   -  person Steve Casey    schedule 24.01.2010
comment
... и если вам нужно больше примеров того, как определение контрактов WCF для служб, отличных от WCF, является проблемой, см. здесь stackoverflow.com/questions/2180676/   -  person Darrel Miller    schedule 03.02.2010


Ответы (2)


Посмотрите Кирка Эванса Создание клиента REST Twitter с помощью WCF. Последние улучшения WCF в .NET 3.5 SP1 упрощают многие интерфейсы RESTful.

Также ознакомьтесь с Библиотекой объявлений API Twitter WCF 3.5 с сайта MSDN.

Вот еще один пример - ВНИМАНИЕ! по состоянию на 03.02.10 ссылка "боркалась"

person TheSoftwareJedi    schedule 08.11.2008

Нет никаких преимуществ в использовании WCF для использования API на основе Http, такого как Twitter API. System.Net.HttpWebRequest более чем достаточно. На самом деле я подозреваю, что у вас возникнут некоторые трудности. WCF намного проще начать работать, когда у вас есть WCF на обоих концах сети.

Однако, если REST API возвращает содержимое Atom, вы можете использовать классы System.ServiceModel.Syndication, чтобы помочь проанализировать ответ.

РЕДАКТИРОВАТЬ: с тех пор, как я написал этот пост, Microsoft выпустила предварительную версию новой клиентской библиотеки HTTP, которая еще лучше справляется с потреблением служб RESTful.
Вот как вы могли бы использовать ее для POST в Twitter:

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);

Если вам нужны более подробные сведения об этой клиентской библиотеке, я сейчас пишу несколько сообщений об этом в блоге здесь.

person Darrel Miller    schedule 08.11.2008
comment
А вы, сэр, выиграете самую неправильную награду. Создание DataContracts для представления удаленных данных и предоставление возможности различным сериализаторам .NET выполнять грязную работу - огромная победа. - person TheSoftwareJedi; 08.11.2008
comment
Создав веб-сервисы с помощью ASMX, WCF, System.ServiceModel.Web и P&P's Web Services Software Factory и потратив последний год на REST-сервисы, я могу заверить вас, что мой опыт не согласуется с вашим утверждением. - person Darrel Miller; 09.11.2008
comment
@TheSoftwareJedi Я призываю вас создать контракт данных, который будет успешно десериализовать XML-ответы, которые вы получаете от twitter API. Если вы опубликуете решение, я удалю свой ответ. - person Darrel Miller; 01.07.2009
comment
DataContracts очень ограничены в том, что они могут делать при обработке xml. Я разделяю мнение Даррела, HttpWebRequest намного проще, чем иметь дело со всем стеком WCF, который не может десериализовать много содержимого xml, будь то смешанный контент, атрибуты или децентрализованная расширяемость (пространства имен ). - person SerialSeb; 23.01.2010