Как получить пользовательский заголовок SOAP из ответа службы WCF в Silverlight? - PullRequest
2 голосов
/ 23 марта 2011

Я пытаюсь получить настраиваемый заголовок ответного сообщения в приложении Silverlight.

на стороне сервера новый MessageHeader добавлен в заголовки ответа:

OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("headerName", "headerNS", "The header value"));

и я вижу этот заголовок в Fiddler:

с: Конверт [ XMLNS: s = http://schemas.xmlsoap.org/soap/envelope/ ]

с: Header

headerName [xmlns = headerNS] значение заголовка

Но я не могу найти способ прочитать значение заголовка в обратном вызове службы приложения Silverlight:

            using (new OperationContextScope(proxy.InnerChannel))
            {
                var headers = OperationContext.Current.IncomingMessageHeaders;
                // headers is null :(

            }

Кто-нибудь сталкивался с подобной проблемой?

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Получение SOAP-заголовков в ответах на Silverlight не так просто, как должно быть. Если вы используете обратные вызовы на основе событий, вам не повезло - это просто не работает. Вам нужно использовать вызов операции типа Begin / End, как в примере ниже.

void Button_Click(...)
{
   MyClient client = new MyClient();
   IClient proxy = (IClient)client; // need to cast to the [ServiceContract] interface
   proxy.BeginOperation("hello", delegate(IAsyncResult asyncResult)
   {
      using (new OperationContextScope(client.InnerChannel))
      {
         proxy.EndOperation(asyncResult);
         var headers = OperationContext.Current.IncomingMessageHeaders;
         // now you can access it.
      }
   });
}

Обратите внимание, что вы не можете использовать сгенерированный клиент (из slsvcutil / add service reference) напрямую, вам нужно привести его к интерфейсу, так как методы Begin / End не предоставляются (явно реализованы) в классе клиента. *

0 голосов
/ 23 марта 2011

Чтобы получить заголовки из http-запроса, попробуйте использовать Клиентский стек HTTP .

Самый простой способ сделать это - зарегистрировать префикс, например:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...