Использовать тело json в конверте Soap при отправке в службу WCF - PullRequest
3 голосов
/ 21 сентября 2010

Мне нужно соединиться с мыльным заголовком аутентификации с телом json.

Я создал контракт так:

[ServiceContract(Namespace = "http://tourico.com/webservices/hotelv3")]
public interface IHotelMobileFlow
{
    [OperationContract, WebInvoke(
       BodyStyle = WebMessageBodyStyle.Wrapped,
       RequestFormat = WebMessageFormat.Json,
       ResponseFormat = WebMessageFormat.Json)]
    SearchResultMobile SearchHotels(SearchRequestMobile request);

Услуга такая:

[AuthenticationRequired(typeof(HotelFlow), typeof(DefaultClientAuthenticationHandler))]
public class HotelMobileFlow : IHotelMobileFlow
{

для атрибута 'AuthenticationRequired' мне нужно отправить мыльный заголовок

<soapenv:Header>
      <aut:AuthenticationHeader>
         <aut:LoginName>host</aut:LoginName>
         <aut:Password>password</aut:Password>
         <aut:Culture>en_US</aut:Culture>
         <aut:Version>8</aut:Version>
      </aut:AuthenticationHeader>
   </soapenv:Header>

Я создал запрос следующим образом:

HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";

SearchRequestMobile sr = new SearchRequestMobile();

Можно ли добавить заголовок мыла в запрос json? Есть другой вариант, как перенести заголовок на сервис?

Спасибо, Михал

1 Ответ

1 голос
/ 21 сентября 2010

Нет, невозможно добавить SOAP-заголовок в JSON-запрос.Сервис не сможет разобрать его.Ваш веб-запрос определяет, что вы отправляете JSON.Это означает, что содержимое запроса может быть только JSON.

Теоретически, если вы внедрите свой собственный кодировщик сообщений, вы сможете отправлять содержимое JSON в теле SOAP и добавлять заголовки SOAP, но сложность этой разработки не делает.Это того стоит.

Вы должны предоставить другой способ аутентификации вашего клиента.Вместо этого используйте собственный HTTP-заголовок.

...