Ошибка WCF - не удается получить MessageHeaders, добавленные на стороне клиента - PullRequest
1 голос
/ 19 апреля 2011

Я пытаюсь использовать этот простой код в WCF:

Клиентская сторона:

ServiceContractClient proxy = new ServiceContractClient();
using (OperationContextScope scope = new OperationContextScope((IContextChannel)proxy.InnerChannel))
        {
            MessageHeaders messageHeadersElement = OperationContext.Current.OutgoingMessageHeaders;
            messageHeadersElement.Add(MessageHeader.CreateHeader("username", String.Empty, System.Security.Principal.WindowsIdentity.GetCurrent().Name)); 
        }
var res = proxy.CallWCFMethod();

Сторона сервера:

CallWCFMethod реализует другой метод, GetInfo (). Код для GetInfo ():

MessageHeaders messageHeadersElement = OperationContext.Current.IncomingMessageHeaders;            
        int AdidIndex = messageHeadersElement.FindHeader("username", string.Empty);
        string ticket = messageHeadersElement.GetHeader<string>("username", string.Empty);

Но этот код никогда не сможет найти заголовок "username", который я добавил в клиент. Может кто-нибудь указать мне, что я здесь делаю неправильно?

1 Ответ

5 голосов
/ 19 апреля 2011

Ваш OperationContextScope имеет слишком малую область.Поставьте закрывающую фигурную скобку после proxy.CallWCFMethod(), и она должна работать:

ServiceContractClient proxy = new ServiceContractClient();
using (OperationContextScope scope = new OperationContextScope((IContextChannel)proxy.InnerChannel))
{
    MessageHeaders messageHeadersElement = OperationContext.Current.OutgoingMessageHeaders;
    messageHeadersElement.Add(MessageHeader.CreateHeader("username", String.Empty,
        System.Security.Principal.WindowsIdentity.GetCurrent().Name)); 
    var res = proxy.CallWCFMethod();
}

Возможно, вам придется еще раз провести рефакторинг своего кода, потому что вы захотите объявить свой resпеременная вне области действия using.В таком случае вам придется явно ввести переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...