REVISIÓN: Hay una revisión que permite que WCF para enviar los mensajes protegidos y recibir respuestas no seguras y para enviar mensajes no seguros y recibir respuestas seguras para.NET Framework 3.5 SP1


INTRODUCCIÓN


Windows Communication Foundation (WCF) no tiene la funcionalidad para enviar mensajes protegidos y, a continuación, recibir respuestas no seguras, o para enviar mensajes no seguros y recibir respuestas seguras. La revisión que se describe en este artículo agrega un nuevo atributo enableUnsecuredResponse . El valor predeterminado del atributo enableUnsecuredResponse es false. Si establece el valor de este atributo en true, se habilitan las siguientes nuevas características de WCF:
  • Clientes WCF pueden aceptar respuestas no seguras, incluso si los mensajes salientes se protegen mediante el protocolo Secure Socket Layer (SSL) para firmar el cuerpo del mensaje.
  • Servicios WCF pueden enviar respuestas no seguras que no tienen ningún encabezado de seguridad en los sobres SOAP incluso si la solicitud está protegida.
Nota: El atributo enableUnsecuredResponse sólo se aplica sólo al tipo de enlace CustomBinding .

Solución


Si está utilizando la versión 3.0 de.NET Framework, instale el hotfix que se describe en el siguiente artículo de Microsoft Knowledge Base:
CORREGIR 967105 : una revisión que permite que WCF enviar los mensajes protegidos y recibir no segura de las respuestas, y enviar mensajes no seguros y recibir respuestas seguras, está disponible para la versión 3.0 de.NET Framework
Si utiliza.NET Framework 3.5 Service Pack 1 en Windows 7 o Windows Server 2008 R2, instale la revisión que se describe en el siguiente artículo de Microsoft Knowledge Base:
977420 hay un paquete acumulativo de revisiones solucionar problemas en Windows Communication Foundation en.NET Framework 3.5 SP1 para Windows 7 y Windows Server 2008 R2
Si está utilizando el Service Pack 1 de.NET Framework 3.5 en otros sistemas operativos, instale la revisión siguiente para resolver el problema.

Ahora hay una revisión compatible de Microsoft. Sin embargo, se pretende corregir el problema que se describe en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico. Esta revisión puede ser sometida a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere al próximo service pack que contenga esta revisión.

Para resolver este problema inmediatamente, póngase en contacto con los servicios de soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de números de teléfono de los servicios de soporte al cliente de Microsoft e información acerca de los costos de soporte técnico, visite el siguiente sitio Web de Microsoft:Nota: En casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

Requisitos previos

Para aplicar este hotfix debe tener el Service Pack 1 de.NET Framework 3.5.

Requisito de reinicio

No es necesario que reinicie el equipo después de aplicar esta revisión si no se utiliza ninguna instancia del de.NET Framework.

Información de reemplazo de revisión

Este hotfix no sustituye a otras revisiones.

Información de archivo

La versión en inglés de esta revisión tiene los atributos de archivo (o atributos del archivo más reciente) mostrados en la tabla siguiente. Las fechas y horas de estos archivos se muestran en la hora Universal coordinada (UTC). Al ver la información del archivo, se convierte en hora local. Para encontrar la diferencia entre la hora UTC y la hora local, utilice la ficha Zona horaria en el elemento de Fecha y hora del Panel de control.
Información de archivo para todas las versiones basadas en x86 de Windows Server 2003 y Windows XP
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Servicemonikersupport.dll3.0.4506.411917,24001-Jun-200922:56x86
System.runtime.serialization.dll3.0.4506.4119970,75201-Jun-200922:56x86
System.servicemodel.dll3.0.4506.41195,931,00801-Jun-200922:56x86
Información de archivo para todas las versiones basadas en x64 de Windows Server 2003 y Windows XP
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Servicemonikersupport.dll3.0.4506.411919,30401-Jun-200922:28x64
System.runtime.serialization.dll3.0.4506.4119847,87201-Jun-200922:28x64
System.servicemodel.dll3.0.4506.41195,267,45601-Jun-200922:28x64
Información de archivo para todas las versiones basadas en x86 de Windows Vista Service Pack 2 y Windows Server 2008 SP2
Nombre del archivoVersión del archivoTamaño de archivoFechaHora
Servicemonikersupport.dll3.0.4506.412017,24010-Jun-200906:55
System.runtime.serialization.dll3.0.4506.4120970,75210-Jun-200906:55
System.servicemodel.dll3.0.4506.41205,935,10410-Jun-200906:55
Información de archivo para todas las versiones basadas en x64 de Windows Vista Service Pack 2 y Windows Server 2008 SP2
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Servicemonikersupport.dll3.0.4506.412019,28810-Jun-200906:56x64
System.runtime.serialization.dll3.0.4506.4120847,87210-Jun-200906:56x64
System.servicemodel.dll3.0.4506.41205,271,55210-Jun-200906:56x64
Información de archivos para todas las versiones basadas en Itanium de Windows Server 2008 SP2
Nombre del archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Servicemonikersupport.dll3.0.4506.412033,64010-Jun-200906:56IA-64
System.runtime.serialization.dll3.0.4506.4120847,87210-Jun-200906:56IA-64
System.servicemodel.dll3.0.4506.41205,271,55210-Jun-200906:56IA-64

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Más información


Utilice el siguiente código de ejemplo para probar el atributo enableUnsecuredResponse :

Servicio
BindingElementCollection serviceBec = new BindingElementCollection();
SecurityBindingElement serviceSbe = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
serviceSbe.EnableUnsecuredResponse = true;
serviceBec.Add(serviceSbe);
serviceBec.Add(new TextMessageEncodingBindingElement());
serviceBec.Add(new HttpTransportBindingElement());
Binding serviceBinding = new CustomBinding(serviceBec);

ServiceHost serviceHost = new ServiceHost(typeof(RequestReply));

serviceHost.Open();
Cliente
BindingElementCollection clientBec = new BindingElementCollection();
SecurityBindingElement clientSbe = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
clientSbe.EnableUnsecuredResponse = true;
clientBec.Add(clientSbe);
clientBec.Add(new TextMessageEncodingBindingElement());
clientBec.Add(new HttpTransportBindingElement());
Binding clientBinding = new CustomBinding(clientBec);

IRequestReply channel = cf.CreateChannel();
try
{
channel.SendString("Hello");
cf.Close();
}