добавить пользовательский заголовок для проверки подлинности безопасности в wcf

#wcf #json #soap #soapheader

#wcf #json #soap #soapheader

Вопрос:

я использую webHttpBinding для предоставления wcf serivces и возврата формата JSON, я хочу сделать некоторую проверку подлинности безопасности в заголовке, например:

 CustomerServiceClient client = new CustomerServiceClient();

            using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
            {
                MessageHeader header = MessageHeader.CreateHeader("username", "http://tempuri.org", "testuser");

                OperationContext.Current.OutgoingMessageHeaders.Add(header);

            }
  

но я получил это сообщение об ошибке:
Версия конверта ‘EnvelopeNone (http://schemas.microsoft.com/ws/2005/05/envelope/none )’ не поддерживает добавление заголовков сообщений.

я долго гуглил, но у меня не было результата.

Спасибо.

Ответ №1:

Я полагаю, что MessageHeader предназначен для заголовков SOAP и служб SOAP в соответствии с первой строкой документации MSDN для класса MessageHeader:

http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.messageheader.aspx

Поскольку вы используете webHttpBinding, я предполагаю, что вы создаете службу REST, а не службу SOAP. В этом случае вам следует использовать класс System.Net.WebClient:

http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx

или аналогичный и установите заголовок, используя его свойство Headers. Чтобы было понятно, это установит заголовки HTTP, а не заголовки сообщений SOAP, поскольку вы не используете SOAP.

Если вы действительно хотите установить имя пользователя (и, я думаю, пароль), как в вашем примере кода, то вы можете использовать свойство Credentials WebClient, а не устанавливать заголовок авторизации с помощью свойства Headers .