Лучший способ поддержать "application/x-www-form-urlencoded" данные публикации с WCF?

Я создаю службу WCF на основе спецификации W3C, которая определяет конечную точку веб-службы RESTful, которая принимает почтовые данные "application/x-www-form-urlencoded". WCF не поддерживает этот тип кодировки сообщений по умолчанию, и я нашел несколько различных примеров создания контракта, который выглядит следующим образом:

XElement Query_Post(Stream postData);

А затем в рамках реализации декодирования postData поток с помощью HttpUtility.ParseQueryString метод.

Кто-нибудь знает о более типизированном способе поддержки "application/x-www-form-urlencoded" в WCF?

Я хотел бы, чтобы мой контракт на эксплуатацию был:

XElement Query_Post(string query, string [] params);

2 ответа

Решение

Лучший способ - это использовать Stream как Raw HTTP POST с WCF или что вы говорите. Причина в том, что WCF абстрагирует весь материал физического макета уровня связи от кода сервиса. В идеале вы хотели бы создать сервис, который мог бы превратиться в SOAP или REST, просто щелкнув выключателем.

Чтобы поддержать его изначально, вам, вероятно, придется расширить WebHttpBinding или сделайте свою собственную привязку и внедрите собственный кодировщик. Это симметрично выводу, как сказано в сообщении. Вы должны повернуть руки, чтобы WCF выводил не XML/JSON.

Библиотека Contrib WCF REST включает эту функцию:

https://github.com/mikeobrien/WcfRestContrib

Он включает в себя форматер POX и форматированный кодировщик URL-адреса и позволяет легко создавать свои собственные. Форматеры отображаются на типы MIME и автоматически выбираются для сериализации / десериализации тела объекта на основе типа контента и принятия заголовков.

Другие вопросы по тегам