2016-10-05 1 views
0

Ich habe eine SOAP, mit der ich versuche zu arbeiten, aber ich stoße auf das nächste Problem, dass ich die Lösung in ähnlichen Fragen nicht finden konnte:
Die SOAP muss sein über HTTPS und mit Windows-Anmeldeinformationen aufgerufen. Winform-App zum Aufrufen von SOAP-HTTPS mit Windows-Authentifizierung konfigurieren

Was ich versuchte, in der App Config zu tun ist, die nächsten Dinge:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpsBinding> 
     <binding name="WebServiceSoap"> 
      <security mode="TransportWithMessageCredential"> 
      <transport clientCredentialType="Windows" /> 
      <message clientCredentialType="UserName"/> 
      </security> 
     </binding> 
     </basicHttpsBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://someapp/SDK/WebService.asmx" 
     binding="basicHttpsBinding" bindingConfiguration="WebServiceSoap" 
     contract="someapp_contract.WebServiceSoap" name="WebServiceSoap" /> 
    </client> 
    </system.serviceModel> 
</configuration> 

Und die Fehler, die ich erhalte, ist:

The username is not provided. Specify username in ClientCredentials.And the error 

ich differt confingruation versuchte auch mit Basichttpbinding und

<security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Windows" /> 

aber, als der Fehler, die ich erhalte, ist (was einen sehr logischen Fehler):

provided URI scheme 'https' is invalid; expected 'http'... 

Hat jemand das gleiche Problem in der Vergangenheit?

Vielen Dank im Voraus.
Max

P. S:
Wenn ich

<security mode="Transport"> 

statt

<security mode="TransportWithMessageCredential"> 

ich den nächsten Fehler zu tun:

The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate,NTLM'. 

Antwort

0

die Einstellungen oben folgen.
Wenn ich benutze:

<security mode="Transport"> 

und den Fehler:

The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate,NTLM'. 

Was ich sind die nächsten Änderungen gemacht haben.
1) zunächst an den app.config

<security mode="Transport"> 
    <transport clientCredentialType="Windows" /> 
    <message clientCredentialType="UserName" algorithmSuite="Default" /> 
</security> 

als am Code:

public static class Ssl 
{ 
    private static readonly string[] TrustedHosts = new[] { 
     "YourServiceName", 
     "YourServiceName2" 
    }; 

    public static void EnableTrustedHosts() 
    { 
     ServicePointManager.ServerCertificateValidationCallback = 
     (sender, certificate, chain, errors) => 
     { 
      if (errors == SslPolicyErrors.None) 
      { 
       return true; 
      } 

      var request = sender as HttpWebRequest; 
      if (request != null) 
      { 
       return TrustedHosts.Contains(request.RequestUri.Host); 
      } 

      return false; 
     }; 
    } 
} 

Und:

YourContractInstance.ClientCredentials.Windows.ClientCredential.UserName = ***; 
YourContractInstance.ClientCredentials.Windows.ClientCredential.Domain = ***; 
YourContractInstance.ClientCredentials.Windows.ClientCredential.Password = ***; 
YourContractInstance.ClientCredentials.Windows.AllowNtlm = true; 

dieser Problemumgehung All gemacht wurde, weil ich ein Problem habe mit die Zertifikats- | DNS-Konfiguration auf dem Host des SOAP-Dienstes, auf den ich nicht zugreifen darf, daher musste ich die Dienstreferenz nach IP hinzufügen.

Verwandte Themen