2014-01-15 2 views
2

Приложение SoapUI Я устанавливаю пароль и имя пользователя для конечной точки. Когда вы вызываете метод, эти данные не передаются в заголовке сообщения, а вне его (Authorization: Basic YTph). Однако в этом случае вызов успешно завершается. Если я попытаюсь добавить данные аутентификации в заголовок в моем клиентском приложении C#, служба не увидит имена пользователей.Авторизация: базовый клиент для службы SOAP

SoapUI:

POST https://xxx.xx:9444/xx HTTP/1.1 
Accept-Encoding: gzip,deflate 
Content-Type: text/xml;charset=UTF-8 
SOAPAction: "" 
Authorization: Basic YTph 
Content-Length: 470 
Host: xx.loc:9444 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ami="http://xxx.pl"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ami:getMeterPointStates> 
     <addr> 
      <ppec>0</ppec> 
      <mid>0</mid> 
     </addr> 
     <start>2012-04-01T00:00:00</start> 
     <stop>2012-05-01T00:00:00</stop> 
     <hard>false</hard> 
     </ami:getMeterPointStates> 
    </soapenv:Body> 
</soapenv:Envelope> 

C# код клиента выборочными:

System.Net.ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(RemoteCertValidate); 
CommunicationWebserviceClient client = new CommunicationWebserviceClient(); 

client.ClientCredentials.UserName.UserName = "user"; 
client.ClientCredentials.UserName.Password = "password"; 

using (new System.ServiceModel.OperationContextScope(client.InnerChannel)) 
{ 
    MessageHeader head = MessageHeader.CreateHeader("Authorization", "http://xxx.pl", "Basic YTph"); 
    OperationContext.Current.OutgoingMessageHeaders.Add(head); 

    MeterPointAddr addr = new MeterPointAddr(); 
    addr.ppec = "0"; 
    addr.mid = "0"; 

    var response = client.getMeterPointStates(addr, new DateTime(2012, 4, 1), new DateTime(2012, 4, 14), false, "", measurementsFlagEnum.REAL_ESTIMATION); 
} 

App.config:

<bindings> 
    <customBinding> 
     <binding name="CommunicationWebservicePortBinding"> 
      <textMessageEncoding messageVersion="Soap11" /> 

      <httpsTransport authenticationScheme="Basic" /> 
     </binding> 
    </customBinding> 
</bindings> 
<client> 
    <endpoint address="https://xxx.xx:9444/xx" 
     binding="customBinding" bindingConfiguration="CommunicationWebservicePortBinding" contract="AMIService.CommunicationWebservice" 
     name="CommunicationWebservicePort" /> 
</client> 

Как добавить клиент, написанный на C#, что (Authorization: Basic YTph) заголовок?

+0

Я предположил бы, что в вашем коде # клиента C, вам не нужно, чтобы добавить 'MessageHeader.CreateHeader (...' строка "Authorization" Эта строка генерируется автоматически, когда вы устанавливаете аутентификацию на базовый язык и используете имя пользователя с паролем. 'YTph' - это фактически ваше имя пользователя и пароль, закодированные по базе 64. Обязательно используйте SSL, если это производственный код. – oleksii

+0

Это сработало для меня. http://stackoverflow.com/questions/20495105/basic-authentication-in-php-webservice-with -c/20517700 # 20517700 Имейте пример кода. – Paulo

ответ

1

я нашел решение в другом вопросе :)

How to add custom Http Header for C# Web Service Client consuming Axis 1.4 Web service

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/18912212) – Chris

Смежные вопросы