2010-11-17 8 views
9

Tengo un servicio .Net ejecutándose en IIS 6 y WCF para el que quiero crear dos puntos finales. Una protegida con HTTPS y autenticación básica a la que se accederá desde nuestra DMZ y un punto final sin seguridad a la que solo se podrá acceder desde la red segura interna. Un firewall y quizás filtros .Net garantizarán que no se pueda acceder al servicio no protegido fuera de la red segura.Dos puntos finales para el mismo servicio en WCF, uno seguro no

Hasta ahora no he tenido éxito obteniendo dos puntos finales trabajando con diferentes parámetros de seguridad. Una configuración Probé es:

<service name="My.Service"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost/MyService/"/> 
     </baseAddresses> 
    </host> 
    <endpoint address="UnSecuredAccessToMyService.svc" 
       behaviorConfiguration="restBehavior" 
       name="UnSecureEndpoint" 
       binding="webHttpBinding" 
       bindingName="SomeBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
    <endpoint address="SecuredAccessToMyService.svc" 
       behaviorConfiguration="secBehavior" 
       name="SecuredEnpoint" 
       binding="webHttpBinding" 
       bindingConfiguration="customSecureBinding" 
       bindingName="SecBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
</service> 

<behaviors> 
    <endpointBehaviors> 
     <behavior name="restBehavior"> 
      <webHttp /> 
     </behavior> 
     <behavior name="secBehavior"> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

<bindings> 
    <webHttpBinding> 
     <binding name="customSecureBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Basic"/> 
      </security> 
     </binding> 
    </webHttpBinding> 
</bindings> 

Los archivos UnSecuredAccessToMyService.svc y SecuredAccessToMyService.svc ven como:

<%@ ServiceHost 
    Factory="somefactory, anotherfactory" 
    Service="My.Service, AnotherService" 
%> 

soy muy nuevo en WCF y .Net detalles adicionales por lo que realmente podría ayudar, Gracias!

Respuesta

7

Parece que tienes uniones y comportamientos un poco confusos. Pruebe a cambiar la configuración a lo siguiente:

<services> 

    <service name="My.Service"> 
     <endpoint address="UnSecuredAccessToMyService.svc" 
        binding="webHttpBinding" 
        bindingNamespace="http://mydomain/myservice" 
        contract="Domain.MyService.MyClass" /> 

     <endpoint address="SecuredAccessToMyService.svc" 
        binding="webHttpBinding" 
        bindingName="secureWebHttpBinding" 
        bindingNamespace="http://mydomain/myservice" 
        contract="Domain.MyService.MyClass" /> 
    </service> 

</services> 

<bindings> 
    <webHttpBinding> 
     <binding name="secureWebHttpBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Basic"/> 
      </security> 
     </binding> 
    </webHttpBinding> 
</bindings> 

Esto especifica ambos extremos deben utilizar WebHttpBinding, pero uno va a utilizar el enlace predeterminado y otro voluntad utilizó una unión "secureWebHttpBinding" llamada que está configurado para utilizar la seguridad de capa de transporte (SSL) y autenticación básica del cliente.

Esto no debería requerir una configuración adicional o un comportamiento personalizado a menos que tenga necesidades más allá de lo que está incorporado por defecto.

Lamentablemente, una gran cantidad de WCF es la depuración de prueba y error hasta que identifica exactamente qué elemento no funciona correctamente. Si la información que le he dado no funciona, especifique más síntomas de su problema e intentaré brindarle más ayuda.

+0

no _bindingNamespace_ ¿será *** httpS ***? El URI (o ** baseaddress **) es _'https: // mydomain/myservice'_? – Kiquenet

+0

Su espacio de nombre es un URI que califica de manera única los elementos XML de sus metadatos de enlace de servicio para que no sean ambiguos. Puede ser cualquier valor de URI, pero normalmente toma el valor de una URL para darle una legibilidad humana.El esquema http: // se usa a menudo cuando desea proporcionar algún tipo de documentación en esa ubicación. –

1

utilizar la configuración como

<service name="My.Service"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost/MyService/UnSecuredAccessToMyService.svc"/> 
     </baseAddresses> 
    </host> 
    <endpoint address="UnSecuredAccessToMyService" 
       behaviorConfiguration="restBehavior" 
       name="UnSecureEndpoint" 
       binding="webHttpBinding" 
       bindingName="SomeBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
    <endpoint address="SecuredAccessToMyService" 
       behaviorConfiguration="secBehavior" 
       name="SecuredEnpoint" 
       binding="webHttpBinding" 
       bindingConfiguration="customSecureBinding" 
       bindingName="SecBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
</service> 

Observe que el dirección = "UnSecuredAccessToMyService" y dirección = "SecuredAccessToMyService" para una parte de punto final que es muy importante. Ahora, cuando usted está llamando la URL del cliente es necesario llamar a la URI como http://localhost/MyService/UnSecuredAccessToMyService.svc/UnSecuredAccessToMyService de acceso no seguros y http://localhost/MyService/UnSecuredAccessToMyService.svc/SecuredAccessToMyService para acceso seguro.

BaseAddress debe ser el nombre completo incluyendo .svc

utilizando la configuración anterior usted será capaz de utilizar mismo archivo .svc, mismo contrato, misma operación/Método 2, pero punto final diferente, 1 seguro y 1 inseguro.

+0

Seguro será *** httpS ***? El URI (o ** baseaddress **) es _'https: // mydomain/myservice'_? _'HTTPS: //localhost/MyService/UnSecuredAccessToMyService.svc'_ – Kiquenet

Cuestiones relacionadas