Лучший способ поддержать "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 и автоматически выбираются для сериализации / десериализации тела объекта на основе типа контента и принятия заголовков.