2009-08-07 313 views
6

Tengo dificultades para conectarme a un servicio web WSE 3.0 de un cliente de WCF. He implementado la clase personalizada de unión como se indica en este artículo KB:Conexión a un servicio web WSE 3.0 desde un cliente WCF

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

El problema parece que tiene que ver con la afirmación de seguridad utilizado por el servicio web - UsernameOverTransport.

Cuando intento llamar a un método, me sale el siguiente excepción:

System.InvalidOperationException:. El 'WseHttpBinding' '[espacio de nombres]' vinculante para la 'MyWebServiceSoap' '[. espacio de nombres] ' contrato está configurado con un modo de autenticación que requiere integridad de nivel de transporte y confidencialidad. Sin embargo, el transporte no puede proporcionar integridad y confidencialidad ..

Se esperaba un nombre de usuario, contraseña y número de CN. En el código de ejemplo que nos proporciona el proveedor, estas credenciales se incluyen en un Microsoft.Web.Services3.Security.Tokens.UsernameToken. Aquí está el ejemplo suministrado por el proveedor:


Esto funciona bien desde una aplicación de 2,0 w ​​/ WSE 3.0 instalado. Aquí hay un fragmento del código de mi cliente WCF:

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 

He rastreado la web en busca de una respuesta a esta pregunta. Algunas fuentes me acercan (como el artículo de MS KB), pero parece que no puedo superar el problema. ¿Alguien me puede ayudar?

+0

Solo para asegurarse, ¿su tercero sabe que WSE está obsoleto? –

+0

¿Has sido capaz de resolver esto? ¿Alguien tiene alguna idea? Actualmente estoy estancado en lo mismo. –

Respuesta

1

El mensaje de error hace referencia al Nivel de transporte Seguridad, esto generalmente significa https.

No ha mostrado sus archivos de configuración. Pero supongo que configuró la seguridad para ser transportada (o se requiere como constricción de otra opción) y utilizó una dirección que es http en lugar de https.

+0

Hola Shiraz, gracias por responder. Estoy definiendo SecurityAsertion como UserNameOverTransport programáticamente en el código que proporcioné anteriormente. El servicio web no usa https, así que no creo que este sea el problema. –

+0

Creo que es por eso que está recibiendo el error. Usted está enviando el nombre de usuario/contraseña a través del transporte, WCF luego ve que la contraseña pasará por el cable desencriptado y se niega a iniciar el servicio. –

+0

Parece que sería una gran diferencia entre WSE3.0 y WCF, entonces. Puedo usar un cliente WSE 3.0 sin SSL para conectarme a mi servicio WSE3, pero un cliente WCF no se conectará con el mismo mensaje que Dave obtuvo en su muestra. –

9

que tuvieron éxito en un caso similar con la siguiente configuración de enlace:

<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> 

espero que funcione para usted también.

Cuestiones relacionadas