Это дубликат http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/94503037-9cc4-494d-88af-4e97fcb9cdcc,, но у меня не было особого успеха, получая там полезные ответы. (
Я пытался найти информацию о том, как получить красивый конкретный клиент службы REST (прокси) от ChannelFactory.
Насколько я понял, вы можете установить attirubtes на клиентском интерфейсе, который говорит WCF использовать XML (DataContract или XmlSerialization) или JSON для ответов и HTTP-запросы на получение в формате URL или HTTP-сообщение XML / JSON. [править из оригинала] И, конечно, предоставляя различные конфигурации привязки либо программно, либо через config. [/ редактировать из оригинала]
Я хотел бы добавить некоторые атрибуты в интерфейс службы, указывающие WCF создать POST в формате URL без заголовка XML, а затем получить ответ в формате XML. (Например)
[редактировать из оригинала] И / или предоставлять привязки BCL, поддерживающие завершение [/ редактировать из оригинала]
Сценарий сна был бы таким:
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);
И есть клиент. Авторизуйтесь на самом деле
HTTP POST /authorize
someHeader: abc
someData=def&someInt=123
И десериализовать
<AuthResponse>
<Message>Hi there!</Message>
</AuthResponse>
Насколько я узнал по поиску в Интернете и грохоту на форумах, сделать это невозможно, если вы не проделаете огромную работу по слесарному делу, написанию перехватчиков, средств форматирования и бог знает, что.
Библиотека материалов WCF, примеры WCF и др. и др. это слишком академично и имеет слишком много слесарного дела и / или слишком мало интуитивной документации для меня, чтобы сделать это без боли. :)
Любые подсказки, где я могу найти самый простой способ сделать это?
(И, пожалуйста, не говорите мне использовать HttpRequest
или WebClient
, поэтому у нас есть ChannelFactory
!;))
[обновление]
Поправьте меня, если я ошибаюсь, но, насколько я понимаю, многие из так называемых REST API требуют запросов в формате URL, а не Json или Xml.
Интерпретация WCF веб-интерфейсов сервисов отражает атрибуты WebGet
и WebInvoke
в определениях методов, чтобы определить, как вызывать каждый "метод" в "сервисах". (Позвольте мне назвать это методом и службой для простоты)
Атрибут WebInvoke
принимает значение перечисления WebRequestFormat
для определения способа сериализации запросов. Это перечисление имеет только Json и Xml.
Мне кажется очень глупым, что это перечисление, а не какой-то указатель на фабрику форматирования / сериализатора или даже конкретное из сказанного.
Итак, вопрос действительно сводится к самому простому, предпочтительно уже реализованному, переопределению сериализации запросов.
[/ обновление]