2009-08-07 5 views
6

Ich habe Probleme bei der Verbindung mit einem WSE 3.0-Webdienst eines Drittanbieters von einem WCF-Client. Ich habe die benutzerdefinierte Bindung Klasse implementiert, wie in diesem KB-Artikel angegeben:Herstellen einer Verbindung mit einem WSE 3.0-Webdienst von einem WCF-Client aus

http://msdn.microsoft.com/en-us/library/ms734745.aspx

Das Problem scheint mit der Sicherheit Behauptung durch den Web-Service verwendet, um zu tun zu haben - UsernameOverTransport.

Wenn ich versuche, eine Methode aufrufen, erhalte ich die folgende Ausnahme:

System.InvalidOperationException:. Die 'WseHttpBinding' '[Namespace]' für die 'MyWebServiceSoap' Bindung '[. Namespace] ' Vertrag ist mit einem Authentifizierungsmodus konfiguriert, der Transport-Level-Integrität und Vertraulichkeit erfordert. Doch der Transport nicht Integrität bieten und Vertraulichkeit ..

Es wird einen Benutzernamen, ein Passwort und CN Zahl erwartet. In dem Beispielcode, der uns vom Anbieter bereitgestellt wird, sind diese Anmeldeinformationen in einem Microsoft.Web.Services3.Security.Tokens.UsernameToken gebündelt. Hier ist das Beispiel vom Hersteller geliefert:


Dies funktioniert aus einem 2,0-App w/WSE 3.0 installiert. Hier ist ein Ausschnitt aus dem Code von meinem WCF-Client:

EndpointAddress address = new EndpointAddress(new Uri("<web service uri here>")); 

WseHttpBinding binding = new WseHttpBinding(); // This is the custom binding I created per the MS KB article 

binding.SecurityAssertion = WseSecurityAssertion.UsernameOverTransport; 
binding.EstablishSecurityContext = false; 

// Not sure about the value of either of these next two 
binding.RequireDerivedKeys = true; 
binding.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt; 

MembershipServiceSoapClient proxy = new MembershipServiceSoapClient(binding, address); 

// This is where I believe the problem lies – I can’t seem to properly setup the security credentials the web service is expecting 

proxy.ClientCredentials.UserName.UserName = "username"; 
proxy.ClientCredentials.UserName.Password = "pwd"; 
// How do I supply the CN number?      

MyObject mo = proxy.MyMethod(); // this throws the exception 

Ich habe das Web durchsucht, um eine Antwort auf diese Frage suchen. Einige Quellen kommen mir nahe (wie der MS KB-Artikel), aber ich kann nicht über den Buckel kommen. Kann mir jemand helfen?

+0

Nur um sicherzustellen, weiß Ihre dritte Partei, dass WSE veraltet ist? –

+0

Konnten Sie das lösen? Hat jemand eine Idee? Ich bin derzeit auf der gleichen Sache fest. –

Antwort

1

Die Fehlermeldung bezieht sich auf Transport Level Sicherheit, dies bedeutet in der Regel https.

Sie haben Ihre Konfigurationsdateien nicht angezeigt. Aber ich vermute, dass Sie die Sicherheit für den Transport konfiguriert haben (oder es ist als eine weitere Wahl erforderlich) und eine Adresse verwendet, die http ist anstelle von https.

+0

Hallo Shiraz, danke für deine Antwort. Ich definiere die SecurityAssetion als UserNameOverTransport programmatisch in dem Code, den ich oben zur Verfügung stelle. Der Webdienst verwendet kein https, daher glaube ich nicht, dass dies das Problem ist. –

+0

Ich denke, das ist der Grund, warum Sie den Fehler bekommen. Sie senden den Benutzernamen/das Passwort über den Transport, WCF sieht dann, dass das Passwort unverschlüsselt über das Kabel geht und den Dienst nicht startet. –

+0

Es scheint, dass ein großer Unterschied zwischen WSE3.0 und WCF dann wäre. Ich kann einen WSE 3.0-Client ohne SSL verwenden, um eine Verbindung zu meinem WSE3-Dienst herzustellen, aber ein WCF-Client verbindet sich nicht mit der gleichen Nachricht, die Dave in seine Stichprobe aufgenommen hat. –

9

Ich hatte Erfolg in einem ähnlichen Fall mit der folgenden Bindungskonfiguration:

<bindings> 
    <customBinding> 
     <binding name="FNCEWS40MTOMBinding"> 
     <security enableUnsecuredResponse="true" authenticationMode="UserNameOverTransport" 
        allowInsecureTransport="true" messageProtectionOrder="SignBeforeEncrypt"> 
      <secureConversationBootstrap /> 
     </security> 
     <mtomMessageEncoding messageVersion="Soap12WSAddressingAugust2004" 
           maxBufferSize="2147483647" /> 
     <httpTransport maxReceivedMessageSize="2147483647" /> 
    </binding> 
    </customBinding> 
</bindings> 

Hoffe, dass es auch für Sie funktioniert.

Verwandte Themen