Herstellen einer Verbindung zu einem WSE 3.0-Webdienst über einen WCF-Client

Ich habe Probleme, von einem WCF-Client aus eine Verbindung zu einem WSE 3.0-Webdienst eines Drittanbieters herzustellen. Ich habe die benutzerdefinierte Bindungsklasse wie in diesem KB-Artikel angegeben implementiert:

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

Das Problem scheint mit der vom Webdienst verwendeten Sicherheitszusicherung - UsernameOverTransport - zu tun zu haben.

Wenn ich versuche, eine Methode aufzurufen, wird die folgende Ausnahme angezeigt:

System.InvalidOperationException: Die Bindung 'WseHttpBinding'. '[Namespace]' für den Vertrag 'MyWebServiceSoap'. '[Namespace]' ist mit einem Authentifizierungsmodus konfiguriert, der Integrität und Vertraulichkeit auf Transportebene erfordert. Der Transport kann jedoch keine Integrität und Vertraulichkeit gewährleisten.

Es werden ein Benutzername, ein Passwort und eine CN-Nummer erwartet. In dem vom Hersteller bereitgestellten Beispielcode sind diese Anmeldeinformationen in einem Microsoft.Web.Services3.Security.Tokens.UsernameToken zusammengefasst. Hier ist das vom Hersteller bereitgestellte Beispiel:

MyWebServiceWse proxy = new MyWebServiceWse();

UsernameToken token = new UsernameToken("Username", "password", PasswordOption.SendPlainText);

token.Id = "<supplied CN Number>";

proxy.SetClientCredential(token);

proxy.SetPolicy(new Policy(new UsernameOverTransportAssertion(), new RequireActionHeaderAssertion()));

MyObject mo = proxy.MyMethod();

Dies funktioniert problemlos mit einer 2.0-App, auf der WSE 3.0 installiert ist. Hier ist ein Ausschnitt des Codes 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 im Internet nach einer Antwort auf diese Frage gesucht. Einige Quellen bringen mich näher (wie der MS KB-Artikel), aber ich komme nicht über den Berg. Kann mir jemand weiterhelfen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage