Comparteix a través de


Compatibilidad de característica de confianza parcial

Windows Communication Foundation (WCF) admite un subconjunto limitado de funciones cuando se ejecuta en un entorno de confianza parcial. Las características admitidas en confianza parcial están diseñadas alrededor de un conjunto concreto de escenarios, tal y como se describe en el tema Supported Deployment Scenarios .

Requisitos mínimos de permiso

WCF admite un subconjunto de características en aplicaciones que se ejecutan bajo cualquiera de los conjuntos de permisos con nombre estándares:

  • Permisos de nivel de confianza medio

  • Permisos de zona de Internet

Al intentar usar WCF en aplicaciones de confianza parcial con permisos más restrictivos, pueden producirse excepciones de seguridad en tiempo de ejecución.

Contratos

Los contratos están sujetos a las restricciones siguientes cuando se ejecutan bajo confianza parcial:

  • La clase de servicio que implementa la interfaz [ServiceContract] debe ser public y tener un constructor public . Si define los métodos [OperationContract] , éstos deben ser public. Si en su lugar implementa una interfaz [ServiceContract] , esas implementaciones de método pueden ser explícitas o private, siempre y cuando la interfaz [ServiceContract] sea public.

  • Al usar el atributo [ServiceKnownType] , el método especificado debe ser public.

  • Las clases[MessageContract] y sus miembros pueden ser public. Si la clase [MessageContract] se define en el ensamblado de aplicación puede ser internal y tener miembros internal .

Enlaces proporcionados por el sistema

BasicHttpBinding y WebHttpBinding se admiten totalmente en un entorno de confianza parcial. WSHttpBinding solo se admite para el modo de seguridad de transporte.

Los enlaces que utilizan transportes distintos a HTTP, como NetTcpBinding, NetNamedPipeBindingo NetMsmqBinding, no se admiten al ejecutarse en un entorno de confianza parcial.

Enlaces personalizados

Se pueden crear y usar enlaces personalizados en un entorno de confianza parcial, pero deben seguir las restricciones especificadas en esta sección.

Transportes

Los únicos elementos de enlace de transporte permitidos son HttpTransportBindingElement y HttpsTransportBindingElement.

Codificadores

Se permiten los codificadores siguientes:

No se admiten los codificadores del mecanismo de optimización de transmisión del mensaje (MTOM).

Seguridad

Las aplicaciones de confianza parcial pueden utilizar las características de seguridad de nivel de transporte de WCF para proteger su comunicación. No se admite la seguridad de nivel de mensaje. Al configurar un enlace para que use la seguridad de nivel de mensaje, se produce una excepción en tiempo de ejecución.

Enlaces no admitidos

No se admiten los enlaces que utilizan mensajería confiable, transacciones o seguridad del nivel de mensaje.

Serialización

Tanto DataContractSerializer como XmlSerializer se admiten en un entorno de confianza parcial. Sin embargo, el uso de DataContractSerializer está sujeto a las condiciones siguientes:

  • Todos los tipos [DataContract] serializables deben ser public.

  • Todos los campos [DataMember] serializables o propiedades en un tipo [DataContract] deben ser públicos y de lectura/escritura. No se admite la serialización y deserialización de los campos readonly cuando se ejecuta WCF en una aplicación de confianza parcial.

  • El modelo de programación [Serializable]/ISerializable no se admite en un entorno de confianza parcial.

  • Los tipos conocidos se deben especificar mediante código o configuración del nivel de equipo (machine.config). Los tipos conocidos no se pueden especificar en la configuración del nivel de de aplicación por razones de seguridad.

  • Los tipos que implementan IObjectReference inician una excepción en un entorno de confianza parcial.

Consulte la sección relativa a la serialización en el tema Partial Trust Best Practices para obtener más información sobre la seguridad al usar DataContractSerializer de manera segura en una aplicación de confianza parcial.

Tipos de colección

Algunos tipos de colección implementan IEnumerable<T> y IEnumerable. Los ejemplos incluyen tipos que implementan ICollection<T>. Tales tipos pueden implementar una implementación public de GetEnumerator()y una implementación explícita de GetEnumerator(). En este caso, DataContractSerializer invoca la implementación public de GetEnumerator()y no la implementación explícita de GetEnumerator(). Si ninguna de las implementaciones de GetEnumerator() es public y todas son implementaciones explícitas, DataContractSerializer invoca a IEnumerable.GetEnumerator().

Para los tipos de colección cuando WCF se está ejecutando en un entorno de confianza parcial, si ninguna de las implementaciones GetEnumerator() es public, o ninguna de ellas es una implementación de interfaz explícita, se producirá una excepción de seguridad.

NetDataContractSerializer

List<T>no admite muchos tipos de colección de .NET Framework, como ArrayList, Dictionary<TKey,TValue> , Hashtable y NetDataContractSerializer , en un entorno de confianza parcial. Estos tipos tienen el atributo [Serializable] establecido y, tal y como se explicó previamente en la sección acerca de la serialización, este atributo no se admite en confianza parcial. DataContractSerializer trata las colecciones de una manera especial y, por lo tanto, puede resolver esta restricción, pero NetDataContractSerializer no tiene ningún mecanismo para evitarla.

DateTimeOffset no admite el tipo NetDataContractSerializer en confianza parcial.

No se puede usar un suplente con NetDataContractSerializer (mediante el mecanismo SurrogateSelector ) cuando se ejecuta con confianza parcial. Observe que esta restricción se aplica al uso de un suplente, no a su serialización.

Habilitación de comportamientos habituales que se van a ejecutar

Los comportamientos de los servicios o puntos de conexión que no están marcados con el atributo AllowPartiallyTrustedCallersAttribute (APTCA) y que se agregan a la sección <commonBehaviors> de un archivo de configuración no se ejecutan cuando la aplicación se ejecuta en un entorno de confianza parcial, y no se inicia ninguna excepción cuando esto ocurre. Para forzar la ejecución de los comportamientos habituales, debe realizar una de las siguientes opciones:

  • Marcar el comportamiento habitual con el atributo AllowPartiallyTrustedCallersAttribute de modo que pueda ejecutarse cuando se implementa como una aplicación de confianza parcial. Tenga en cuenta que puede establecerse una entrada de registro en el equipo para evitar que se ejecuten los ensamblados marcados con APTCA. .

  • Asegurarse de implementar la aplicación como una aplicación de confianza total en la que los usuarios no pueden modificar los valores de la seguridad de acceso del código para ejecutar la aplicación en un entorno de confianza parcial. De poder hacerlo, el comportamiento no se ejecutaría y no se iniciaría ninguna excepción. Para garantizar esto, vea la opción levelfinal con Caspol.exe (Herramienta de directiva de seguridad de acceso del código).

Para obtener un comportamiento común de ejemplo, vea Procedimientos para bloquear puntos de conexión en la empresa.

Configuración

Con una sola excepción, el código de confianza parcial solo puede cargar secciones de configuración de WCF en el archivo app.config local. Para cargar las secciones de configuración de WCF que hacen referencia a las secciones de WCF en machine.config o en un archivo web.config raíz, se requiere ConfigurationPermission (sin restricciones). Sin este permiso, las referencias a las secciones de configuración de WCF (comportamientos, enlaces) fuera del archivo de configuración local producen una excepción cuando se carga la configuración.

La única excepción es la configuración de tipos conocidos para la serialización, tal y como se describe en la sección relativa a la serialización de este tema.

Importante

Las extensiones de configuración solo se admiten cuando se ejecutan bajo plena confianza.

Diagnóstico

Registro de eventos

El registro de eventos limitado se admite bajo confianza parcial. En el registro de eventos solo se registran los errores de activación de servicio y los errores de registro de seguimiento/mensajes. El número máximo de eventos que se pueden registrar por proceso es 5, para evitar que se escriban demasiados mensajes en el registro de eventos.

Registro de mensajes

El registro de mensajes no funciona cuando WCF se ejecuta en un entorno de confianza parcial. Si está habilitado bajo confianza parcial, no produce un error en la activación del servicio, pero no se registra ningún mensaje.

Seguimiento

La funcionalidad de seguimiento restringido está disponible al ejecutarse en un entorno de confianza parcial. En el elemento <listeners> del archivo de configuración, los únicos tipos que puede agregar son TextWriterTraceListener y el nuevo EventSchemaTraceListener. El uso del XmlWriterTraceListener estándar puede producir registros incompletos o incorrectos.

Los orígenes de seguimiento admitidos son:

No se admiten los siguientes orígenes de seguimiento:

No se deben especificar los siguientes miembros de la enumeración TraceOptions :

Al utilizar el seguimiento en un entorno de confianza parcial, asegúrese de que la aplicación tiene los permisos necesarios para almacenar el resultado del agente de escucha de seguimiento. Por ejemplo, al utilizar TextWriterTraceListener para escribir el resultado de seguimiento en un archivo de texto, asegúrese de que la aplicación tiene el FileIOPermission necesario exigido para escribir correctamente en el archivo de seguimiento.

Nota:

Para evitar inundar los archivos de seguimiento con errores duplicados, WCF deshabilita el seguimiento del recurso o acción después del primer error de seguridad. Hay un seguimiento de excepción para cada acceso erróneo a recurso la primera vez que se realiza un intento de tener acceso al recurso o realizar la acción.

Host de servicio de WCF

El Host de servicio WCF no admite la confianza parcial. Si quiere usar un servicio WCF con confianza parcial, no use la plantilla de proyecto de biblioteca de servicio WCF en Visual Studio para compilar el servicio. En su lugar, cree un sitio web en Visual Studio. Para ello, elija la plantilla de sitio web del servicio WCF, que puede hospedar el servicio en un servidor web en el que se admita la confianza parcial de WCF.

Otras limitaciones

WCF generalmente se limita a las consideraciones de seguridad que la aplicación de hospedaje impone en él. Por ejemplo, si la aplicación de hospedaje se hospeda en una Aplicación Explorador de XAML (XBAP), está sujeto a las limitaciones de XBAP, tal como se describe en Seguridad de confianza parcial en Windows Presentation Foundation.

Las características adicionales siguientes no están habilitadas al ejecutar indigo2 en un entorno de confianza parcial:

  • Instrumental de administración de Windows (WMI)

  • El registro de eventos solo está parcialmente habilitado (consulte la explicación en la sección Diagnósticos ).

  • Contadores de rendimiento

El uso de características de WCF que no se admiten en un entorno de confianza parcial puede producir excepciones en tiempo de ejecución.

Características no enumeradas

La mejor manera de detectar que una parte de la información o acción no está disponible al ejecutarse en un entorno de confianza parcial es intentar tener acceso al recurso o realizar la acción dentro de un bloque try , y, a continuación, catch el error. Para evitar inundar los archivos de seguimiento con errores duplicados, WCF deshabilita el seguimiento del recurso o acción después del primer error de seguridad. Hay un seguimiento de excepción para cada acceso erróneo a recurso la primera vez que se realiza un intento de tener acceso al recurso o realizar la acción.

Consulte también