servicio paso enable crear consume wcf iis-6 https

paso - wcf service c# https



Sesiones de WCF con HTTPS (2)

3) Verdadero , wsHttpBinding y wsDualHttpBinding son los únicos enlaces HTTP que admiten sesiones

5) Falso , para autenticar a las personas que llaman al servicio, no es necesario que tenga ninguna seguridad de nivel de transporte (como SSL / HTTPS). El único requisito es configurar IIS para habilitar la Autenticación de Windows integrada para un directorio virtual. Luego en WCF tienes tres posibilidades para habilitar este escenario:

a) Utilice seguridad de nivel de transporte en wsHttpBinding con credenciales de Windows (HTTPS)

<system.serviceModel> <bindings> <wsHttpBinding> <binding name="SecurityEnabledWsHttp"> <security mode="Transport"> <transport clientCredentialType="Windows" /> </security> </binding> </wsHttpBinding> </bindings> </system.serviceModel>

b) Use seguridad de nivel de mensaje en wsHttpBinding con credenciales de Windows (HTTP)

<system.serviceModel> <bindings> <wsHttpBinding> <binding name="SecurityEnabledWsHttp"> <security mode="Message"> <message clientCredentialType="Windows" /> </security> </binding> </wsHttpBinding> </bindings> </system.serviceModel>

c) Ejecute su servicio en el Modo de compatibilidad ASP.NET y habilite la Autenticación de Windows en ASP.NET (HTTP)

<system.web> <authentication mode="Windows" /> </system.web>

Tenga en cuenta que en a y b accederá a la identidad de la persona que llama desde un servicio de esta manera:

OperationContext.Current.ServiceSecurityContext.WindowsIdentity

6) Es cierto , la seguridad de nivel de transporte debe estar habilitada en wsHttpBinding para usar HTTPS

7) False , Reliable Sessions es una implementación particular de Reliable Messaging para sesiones de WCF. Reliable Messaging es una especificación estándar WS- * diseñada para garantizar la entrega de mensajes en una red no confiable. Puede usar sesiones de WCF sin Mensajería confiable, y viceversa. Las sesiones se habilitan en el contrato de servicio con este atributo:

[ServiceContract(SessionMode=SessionMode.Required)] public interface IMyService { // ... }

También recuerde que para mantener el estado entre las llamadas de servicio, deberá explícitamente habilitar el modo de instancia apropiado en la implementación del contrato de servicio:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)] public class MyService : IMyService { // ... }

Hay dos tipos de sesiones en WCF: sesiones seguras y sesiones confiables . La configuración predeterminada para wsHttpBinding y netTcpBinding es usar sesiones seguras.
Para wsHttpBinding, esto se lleva a cabo con seguridad a nivel de mensaje utilizando las credenciales del cliente, que es la configuración predeterminada para el enlace.
Para netTcpBinding en su lugar, la sesión se establece en el nivel de transporte mediante el uso de las instalaciones del protocolo TCP.
Esto significa que simplemente cambiar a wsHttpBinding o netTcpBinding habilitará el soporte para las sesiones de WCF.
La alternativa es usar sesiones confiables . Esto tiene que estar explícitamente habilitado en la configuración de enlace y elimina el requisito de usar seguridad de mensaje para wsHttpBinding. Entonces esto funcionará

<bindings> <wshttpbinding> <binding name="ReliableSessionEnabled"> <reliablesession enabled="True" ordered="False" /> <security mode="None" /> </binding> </wshttpbinding> </bindings>

8) Falso , las sesiones confiables se usan independientemente de la configuración de seguridad del canal de comunicación.

Para una explicación más detallada, eche un vistazo a este artículo .

No puedo encontrar la manera de habilitar las instancias por sesión para mi servicio WCF mientras uso HTTPS. (No soy un experto en ASP.NET pero no quiero usar el estado de la sesión ASP.NET si es posible). Estoy usando .NET Framework 3.0.

He llegado a la siguiente contradicción y espero que alguien pueda decirme dónde hay un error en la lógica.

1) El servicio debe estar alojado en IIS 6 debido al mandato del cliente.

2) El servicio necesita mantener el estado entre las llamadas, incluidas las instancias SqlConnection y SqlTransaction (feo pero necesario debido a las limitaciones del proyecto).

3) Por lo tanto, necesito usar el wsHttpBinding.

4) El servicio debe poder acceder a la información de autenticación de usuario desde HttpContext.Current.User.Identity (por ejemplo, usando la seguridad de Windows en IIS).

5) Por lo tanto, se requiere HTTPS.

6) Por lo tanto, la seguridad de nivel de transporte debe configurarse en el enlace.

7) Configurar el servicio para requerir sesiones significa que tengo que configurar wsHttpBinding para usar Reliable Sessions.

8) Esto requiere que la seguridad de nivel de mensaje esté configurada en el enlace.

Ie (6) y (8) son mutuamente excluyentes.

Parece que el uso de sesiones de WCF requiere que use seguridad a nivel de mensajes, lo que me impide usar HTTPS.

¿Qué me estoy perdiendo?


Siguiendo con la excelente respuesta de Enrico, estas son las configuraciones que estoy usando:

Servicio:

<services> <service name="Foo.Bar.Service"> <endpoint name="EndpointHttps" address="" binding="customBinding" bindingConfiguration="EndpointHttps" contract="Foo.Bar.IService" /> </service> </services> <bindings> <customBinding> <binding name="EndpointHttps"> <reliableSession /> <mtomMessageEncoding /> <httpsTransport /> </binding> </customBinding> </bindings>

Cliente:

<client> <endpoint name="EndpointHttps" address="https://server/FooBar/service.svc" binding="customBinding" bindingConfiguration="EndpointHttps" contract="Foo.Bar.IService" /> </client> <bindings> <customBinding> <binding name="EndpointHttps"> <reliableSession /> <mtomMessageEncoding /> <httpsTransport /> </binding> </customBinding> </bindings>

Nota: todavía no he conseguido que esto funcione con la autenticación de Windows.