Partager via


Compatibilité des fonctionnalités dans un environnement de confiance partielle

Windows Communication Foundation (WCF) prend en charge un sous-ensemble limité de fonctionnalités lors de son exécution dans un environnement de confiance partielle. Les fonctionnalités de confiance partielle prises en charge sont conçues autour d'un ensemble spécifique de scénarios comme décrit dans la rubrique Scénarios de déploiement pris en charge.

Autorisations minimales requises

WCF prend en charge un sous-ensemble de fonctionnalités dans les applications qui s'exécutent sous les jeux d'autorisations nommés standard suivants :

  • Autorisations de confiance moyenne

  • Autorisations de la zone Internet

Toute tentative d'utilisation de WCF dans des applications de confiance partielle avec des autorisations plus restrictives peut provoquer des exceptions de sécurité au cours de l'exécution.

Contrats

Les contrats sont soumis aux restrictions suivantes lors de leur exécution dans un environnement de confiance partielle :

  • La classe de service qui implémente l'interface [ServiceContract] doit être public et doit avoir un constructeur public. Si elle définit des méthodes [OperationContract], celles-ci doivent être public. Si, au lieu de cela, elle implémente une interface [ServiceContract], ces implémentations de méthode peuvent être explicites ou private, pourvu que l'interface [ServiceContract] soit public.

  • Lors de l'utilisation de l'attribut [ServiceKnownType], la méthode spécifiée doit être public.

  • Les classes [MessageContract] et leurs membres peuvent être public. Si la classe [MessageContract] est définie dans l'assembly d'application, elle peut être internal et avoir des membres internal.

Liaisons fournies par le système

BasicHttpBinding et WebHttpBinding sont totalement pris en charge dans un environnement de confiance partielle. WSHttpBinding est pris en charge uniquement pour le mode de sécurité Transport.

Les liaisons qui utilisent des transports autres que HTTP, comme NetTcpBinding, NetNamedPipeBinding ou NetMsmqBinding, ne sont pas prises en charge lors de l'exécution dans un environnement de confiance partielle.

Liaisons personnalisées

Les liaisons personnalisées peuvent être créées et utilisées dans un environnement de confiance partielle, mais elles doivent respecter les restrictions décrites dans cette section.

Transports

Les seuls éléments de liaison de transport autorisés sont HttpTransportBindingElement et HttpsTransportBindingElement.

Encodeurs

Les encodeurs suivants sont autorisés :

Les encodeurs MTOM (Message Transmission Optimization Mechanism) ne sont pas pris en charge.

Sécurité

Les applications de confiance partielle peuvent utiliser les fonctionnalités de sécurité au niveau du transport de WCF pour sécuriser leur communication. La sécurité au niveau message n'est pas prise en charge. La configuration d'une liaison pour utiliser la sécurité au niveau message entraîne une exception pendant l'exécution.

Liaisons non prises en charge

Les liaisons qui utilisent une messagerie fiable, des transactions ou une sécurité au niveau du message ne sont pas prises en charge.

Sérialisation

Le DataContractSerializer et le XmlSerializer sont pris en charge dans un environnement de confiance partielle. Toutefois, l'utilisation du DataContractSerializer est soumise aux conditions suivantes :

  • Tous les types [DataContract] sérialisables doivent être public.

  • Tous les champs ou les propriétés [DataMember] sérialisables dans un type [DataContract] doivent être "public" et en lecture/écriture. La sérialisation et la désérialisation des champs en lecture seule n'est pas prise en charge lors de l'exécution de WCF dans une application de confiance partielle.

  • Le modèle de programmation [Serializable]/ISerializable n'est pas pris en charge dans un environnement de confiance partielle.

  • Les types connus doivent être spécifiés dans le code ou la configuration au niveau de l'ordinateur (machine.config). Les types connus ne peuvent pas être spécifiés dans la configuration au niveau de l'application pour des raisons de sécurité.

  • Les types qui implémentent IObjectReference lèvent une exception dans un environnement de confiance partielle.

Consultez la section Sérialisation de Meilleures pratiques dans un environnement de confiance partielle pour plus d'informations sur la sécurité en cas d'utilisation de DataContractSerializer dans une application de confiance partielle.

Types de collection

Certains types de collection implémentent IEnumerable et IEnumerable. Les exemples incluent des types qui implémentent ICollection. Ces types peuvent mettre en œuvre une implémentation public de GetEnumerator() et une implémentation explicite de GetEnumerator(). Dans ce cas, DataContractSerializer appelle l'implémentation public de GetEnumerator() et non l'implémentation explicite de GetEnumerator(). Si aucune des implémentations GetEnumerator() n'est public et que toutes sont des implémentations explicites, alors l'objet DataContractSerializer appelle IEnumerable.GetEnumerator().

Pour les types de collection, lorsque WCF s'exécute dans un environnement de confiance partielle, si aucune des implémentations GetEnumerator() n'est public ou si aucune n'est une implémentation d'interface explicite, une exception de sécurité est levée.

NetDataContractSerializer

De nombreux types de collection .NET Framework, tels que List, ArrayList, Dictionary et Hashtable ne sont pas pris en charge par le NetDataContractSerializer dans l'environnement de confiance partielle. L'attribut [Serializable] de ces types est défini et, comme indiqué précédemment à la section Sérialisation, cet attribut n'est pas pris en charge dans un environnement de confiance partielle. Le DataContractSerializer traite les collections de manière spéciale et peut ainsi contourner cette restriction ; en revanche, le NetDataContractSerializer n'a pas de tel mécanisme pour contourner cette restriction.

Le type DateTimeOffset n'est pas pris en charge par le NetDataContractSerializer dans un environnement de confiance partielle.

Il n'est pas possible d'utiliser un substitut avec le NetDataContractSerializer (à l'aide du mécanisme SurrogateSelector) lors de son exécution dans un environnement de confiance partielle. Notez que cette restriction s'applique à l'utilisation d'un substitut, pas à sa sérialisation.

Activation de l'exécution des comportements courants

Les comportements de service ou de point de terminaison non marqués avec l'attribut AllowPartiallyTrustedCallersAttribute (APTCA) qui sont ajoutés à la section <commonBehaviors> d'un fichier de configuration ne sont pas exécutés lorsque l'application s'exécute dans un environnement de confiance partielle, et aucune exception n'est levée lorsque cela se produit. Pour appliquer l'exécution des comportements courants, vous devez effectuer l'une des actions suivantes :

  • Marquez votre comportement courant avec l'attribut AllowPartiallyTrustedCallersAttribute afin qu'il soit exécuté lorsqu'il est déployé comme une application de confiance partielle. Notez qu'une entrée de Registre peut être définie sur l'ordinateur pour interdire l'exécution des assemblys marqués avec l'attribut APTCA. .

  • Si l'application est déployée comme une application de confiance partielle, vérifiez que les utilisateurs ne peuvent pas modifier les paramètres de sécurité d'accès du code pour exécuter l'application dans un environnement de confiance partielle. S'ils peuvent le faire, le comportement ne s'exécute pas et aucune exception n'est levée. Pour y veiller, consultez l'option levelfinal à l'aide de l'Code Access Security Policy Tool (Caspol.exe).

Pour obtenir un exemple de un comportement courant, consultez Comment : verrouiller des points de terminaison dans l'entreprise.

Configuration

À une exception, le code d'un niveau de confiance partielle ne peut charger que les sections de configuration WCF dans le fichier app.config local. Pour charger des sections de configuration WCF qui référencent des sections WCF dans machine.config ou dans une racine, le fichier web.config requiert une autorisation ConfigurationPermission(Unrestricted). Sans cette autorisation, les références aux sections de configuration WCF (comportements, liaisons) en dehors des résultats de fichier de configuration local aboutissent à une exception lorsque la configuration est chargée.

L'unique exception est la configuration de type connu pour la sérialisation, comme décrit à la section Sérialisation de cette rubrique.

Bb412186.Important(fr-fr,VS.100).gif Remarque :
Les extensions de configuration ne sont prises en charge que lors de l'exécution à un niveau de confiance totale.

Diagnostics

Journalisation des événements

La journalisation des événements limitée est prise en charge dans un environnement de confiance partielle. Seul les échecs d'activation de service et les échecs de suivi/journalisation de message sont consignés dans le journal des événements. Le nombre d'événements maximal qui peuvent être enregistrés par un processus est égal à 5, pour éviter d'écrire un trop grand nombre de messages dans le journal des événements.

Enregistrement des messages

L'enregistrement des messages ne fonctionne pas lorsque WCF est exécuté dans un environnement de confiance partielle. En cas d'activation avec un niveau de confiance partiel, il ne met pas en échec l'activation du service, mais aucun message n'est enregistré.

Traçage

Des fonctionnalités de traçage restreintes sont disponibles lors de l'exécution dans un environnement de confiance partielle. Dans l'élément <listeners> du fichier de configuration, les seuls types que vous pouvez ajouter sont TextWriterTraceListener et le nouveau EventSchemaTraceListener. L'utilisation de XmlWriterTraceListener standard peut provoquer des journaux incomplets ou incorrects.

Les sources de suivi prises en charge sont :

Les sources de suivi suivantes ne sont pas prises en charge :

Les membres suivants de l'énumération TraceOptions ne doivent pas être spécifiés:

Lors de l'utilisation du traçage dans un environnement de confiance partielle, assurez-vous que l'application dispose des autorisations nécessaires pour stocker la sortie de l'écouteur de trace. Par exemple, lors de l'utilisation de TextWriterTraceListener pour écrire le résultat du traçage dans un fichier texte, assurez-vous que l'application bénéficie de l'autorisation FileIOPermission requise pour écrire dans le fichier de trace.

Bb412186.note(fr-fr,VS.100).gifRemarque :
Pour éviter de saturer les fichiers de trace avec des erreurs en double, WCF désactive le traçage de la ressource ou de l'action après le premier échec de sécurité. Une trace d'exception est créée pour chaque échec de l'accès aux ressources lors de la première tentative d'accès à la ressource ou d'accomplissement de l'action.

Hôte de service WCF

L'hôte de service WCF ne prend pas en charge la confiance partielle. Si vous souhaitez utiliser un service WCF dans un environnement de confiance partielle, n'utilisez pas le modèle du projet de bibliothèque de service WCF dans Visual Studio pour générer votre service. Créez plutôt un site Web dans Visual Studio en choisissant le modèle de site Web du service WCF, qui peut héberger le service sur un serveur Web sur lequel la confiance partielle WCF est prise en charge.

Autres limitations

WCF est en général limité par les considérations de sécurité imposées par l'application d'hébergement. Par exemple, si WCF est hébergé dans une application du navigateur XAML (XBAP), il est soumis aux limitations XBAP, comme décrit dans Sécurité de confiance partielle de Windows Presentation Foundation (page pouvant être en anglais).

Les fonctionnalités supplémentaires suivantes ne sont pas activées en cas d'exécution d'indigo2 dans un environnement de confiance partielle :

  • WMI (Windows Management Instrumentation)

  • La journalisation des événements n'est activée que partiellement (consultez la discussion dans la section Diagnostics).

  • Compteurs de performance

L'utilisation des fonctionnalités WCF qui ne sont pas prises en charge dans un environnement de confiance partielle peut provoquer des exceptions pendant l'exécution.

Fonctionnalités non répertoriées

La meilleure méthode pour découvrir qu'une information ou qu'une action n'est pas disponible en cas d'exécution dans un environnement de confiance partielle est d'essayer d'accéder à la ressource ou d'exécuter l'action dans un bloc try, puis d'intercepter l'échec via catch. Pour éviter de saturer les fichiers de trace avec des erreurs en double, WCF désactive le traçage de la ressource ou de l'action après le premier échec de sécurité. Une trace d'exception est créée pour chaque échec de l'accès aux ressources lors de la première tentative d'accès à la ressource ou d'accomplissement de l'action.

Voir aussi

Référence

HttpTransportBindingElement
HttpsTransportBindingElement
TextMessageEncodingBindingElement
WebMessageEncodingBindingElement

Concepts

Scénarios de déploiement pris en charge
Meilleures pratiques dans un environnement de confiance partielle