2015-06-22 2 views
1

Я делаю клиент C#, вызывающий wsdl webservice. Я добавил ссылку на службу с данной ссылкой, генерируя все необходимые объекты.C# обработчик ошибки обработки мыла

Моя проблема заключается в аутентификации. I судимое с SoapUI и работал с этим заголовком:

<soapenv:Header> 
    <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <wsse:UsernameToken wsu:Id="UsernameToken-F56DE979FFAADAB54F143496748776515"> 
     <wsse:Username>USER</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password> 
     <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">iPHOFi2DmB/eL9K6k8NmoQ==</wsse:Nonce> 
     <wsu:Created>2015-06-22T10:04:47.765Z</wsu:Created> 
    </wsse:UsernameToken> 
    </wsse:Security> 

Я установил свой файл config.app так:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="gblDHLExpressTrackSandpit"> 
      <security mode="Transport" > 
      <transport clientCredentialType="Basic" proxyCredentialType="None" realm=""/>    
      </security> 

     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://wsb.dhl.com:443/sndpt/gblDHLExpressTrack" 
      binding="wsHttpBinding" bindingConfiguration="gblDHLExpressTrackSandpit" 
      contract="DHL_WS.gblDHLExpressTrackSandpit" name="gblDHLExpressTrackSandpit" /> 
    </client> 
    </system.serviceModel> 
</configuration> 

Но я получил сообщение об ошибке сказав:

Тип содержимого text/html; charset = utf-8 ответного сообщения не соответствует типу содержимого привязки

в моем коде я управлял autentication как этот

client.ClientCredentials.UserName.UserName = "username"; 
client.ClientCredentials.UserName.Password = @"[email protected]"; 

, что я делаю неправильно?

+0

Я предлагаю вам использовать Fiddler для изучения трафика HTTPS, что ваши обмены приложений с вебом-сервером. Я предполагаю, что веб-сервер возвращает сообщение об ошибке в формате обычного HTML, когда клиент веб-службы ожидает ответа в другом формате кодирования. – Christoph

ответ

1

Я решил! это была проблема аутентификации.

Я изменил мою конфигурацию:

<bindings> 
    <basicHttpBinding> 
    <binding name="gblDHLExpressTrackSandpit"> 
     <security mode="TransportWithMessageCredential">    
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<client> 
    <endpoint address="https://wsb.dhl.com:443/sndpt/gblDHLExpressTrack" 
    binding="basicHttpBinding" bindingConfiguration="gblDHLExpressTrackSandpit" 
    contract="DHL_WS.gblDHLExpressTrackSandpit" name="gblDHLExpressTrackSandpit1" > 
    <headers> 
     <HeaderName>Value</HeaderName> 
    </headers> 
    </endpoint> 
</client> 

И вынуждены не включать метку времени.

System.ServiceModel.Channels.BindingElementCollection elements = client.Endpoint.Binding.CreateBindingElements(); 
     elements.Find<System.ServiceModel.Channels.SecurityBindingElement>().IncludeTimestamp = false; 
     client.Endpoint.Binding = new System.ServiceModel.Channels.CustomBinding(elements); 

Конечно, я передал учетные данные клиента.

Надеется, что это помогает кто-то :)

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