2011-07-06 11 views
12

Estoy intentando configurar mi servicio WCF (.NET 4.0) para que pueda probarse con soapUI. Estoy usando wsHttpBinding con seguridad de mensaje. Mi objetivo es exponer el servicio en un punto final de prueba pública e intentar realizar una prueba de carga con loadUI, que utiliza pruebas soapUI. Para que esto funcione, el punto final debe ser seguro y dado que mi punto final de producción utilizará la seguridad del mensaje, me imagino que mi prueba también debe usarse para lograr resultados de prueba de carga cercanos a la producción.soapUI con WCF Message Security

Parece que no puedo configurar soapUI para llamar con éxito al servicio. He intentado varias combinaciones de firmar y cifrar las entradas y salidas con el certificado de cliente y servidor. ¿Alguien ha logrado alcanzar una configuración de seguridad de mensaje exitosa de WCF y soapUI?

Los siguientes son exerpts de mi configuración:

atar:

<wsHttpBinding> 

      <binding name="MessageSecurity"> 
       <security mode="Message"> 
        <message clientCredentialType="Certificate" negotiateServiceCredential="false"/> 
       </security> 
      </binding> 

     </wsHttpBinding> 

comportamiento

<behaviors> 
     <serviceBehaviors> 
      <behavior name="customBehavior"> 
       <serviceMetadata httpGetEnabled="True"/> 
       <serviceDebug includeExceptionDetailInFaults="True"/> 

       <serviceCredentials> 
        <clientCertificate> 
         <authentication certificateValidationMode="PeerTrust"/> 
        </clientCertificate> 
        <serviceCertificate findValue="MyWebServicesCertificate" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/> 
       </serviceCredentials> 
      </behavior> 
     </serviceBehaviors> 

     <endpointBehaviors> 
      <behavior name="webHttp"> 
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 

    </behaviors> 
</system.serviceModel> 

Servicio:

  <service behaviorConfiguration="customBehavior" name="MyService"> 

      <!-- Service Endpoint --> 
      <endpoint name="Production" address="" binding="wsHttpBinding" bindingConfiguration="MessageSecurity" contract="IMyService"> 

       <identity> 
        <dns value="web_services_svr"/> 
       </identity> 
      </endpoint> 




      <host> 
       <baseAddresses> 
        <add baseAddress="http://web_services_svr/MyService.svc" /> 
       </baseAddresses> 
      </host> 

     </service> 
+1

¿Cuál es exactamente el error que obtiene de SOAPUI al intentar conectarse? – kroonwijk

+0

Intente llamar al servicio desde la aplicación de la consola.captura la solicitud y la respuesta usando el violín y verifica. –

Respuesta

0

Hay un problema con SoapUI en una red donde hay un proxy web. Debe configurar los parámetros del proxy en SoapUI para que esto funcione, suponiendo que no haya otro problema.

1

establece negotiateServiceCredential en false y también estableceSecuritySession en false.

después de esta interoperabilidad es posible. Si agrega ProtectionLecel.Sign en sus contratos (por ejemplo, no encripte), es aún más fácil.

+0

+1: Es una buena sugerencia, pero aún así no quiere funcionar. Después de establecer 'negotiateServiceCredential' y' establishSecuritySession' en false, hay otro error en los registros de seguimiento de WCF: "No había ningún canal que pudiera aceptar el mensaje con la acción 'http://schemas.xmlsoap.org/ws/2005/ 02/trust/RST/Issue '. " – VoodooChild

+0

si establece tanto en falso como en soapui también no hay necesidad en ningún tipo de seguridad –

0

Intente realizar la llamada utilizando el complemento o curl de Firefox. Si puede hacer que la llamada se ejecute exitosamente con cualquier herramienta, intente copiar la solicitud y ejecútela desde soapUI. Si la llamada funciona utilizando cualquier otra herramienta, debería funcionar también en soapUI, a menos que haga una llamada a soap/tcp

1

Es posible que desee comprobar algunas cosas.

1) Conjunto negotiateServiceCredential = "false"

<wsHttpBinding> 
    <binding name="wsHttpSecure"> 
     <security mode="Message"> 
     <message clientCredentialType="UserName" negotiateServiceCredential="false"  
        establishSecurityContext="false" algorithmSuite="Default" /> 
     </security> 
    </binding> 
</wsHttpBinding> 

2) También asegúrese de que en la interfaz de usuario de SOAP comprobar marca "Añadir WSA predeterminado Para"

Comprobar este enlace http://ddkonline.blogspot.com.br/2012/10/wcf-45-host-unreachable-when-calling.html

3) Para pasar el certificado del cliente, verifique el siguiente enlace

http://www.soapui.org/SOAP-and-WSDL/applying-ws-security.html

Espero que eso ayude.