#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 .