Partager via


Meilleures pratiques pour l'hébergement dans Internet Information Services

Cette rubrique définit les meilleures pratiques pour l'hébergement des services Windows Communication Foundation (WCF).

Implémentation des services WCF comme DLL

L'implémentation d'un service WCF comme DLL déployée dans le répertoire \bin d'une application Web vous permet de réutiliser le service en dehors du modèle d'application Web, par exemple, dans un environnement de test dans lequel les services IIS (Internet Information Services) ne sont pas déployés.

Hôtes de service dans les applications hébergées par IIS

N'utilisez pas les API auto-hébergées impératives pour créer de nouveaux hôtes de service qui écoutent les transports de réseau non pris en charge en mode natif par l'environnement d'hébergement IIS (par exemple, IIS 6.0 pour héberger les services TCP, étant donné que la communication TCP n'est pas prise en charge en mode natif sur IIS 6.0). Cette approche n'est pas recommandée. Les hôtes de service créés de manière impérative ne sont pas connus dans l'environnement d'hébergement IIS. Le point critique est que le traitement effectué par les services créés de manière impérative n'est pas pris en charge par les services IIS lorsqu'il détermine si le pool d'applications d'hébergement est inactif. Le résultat est que les applications qui possèdent ce type d'hôtes de service ont un environnement d'hébergement IIS qui élimine systématiquement les processus d'hôte IIS.

URI et points de terminaison hébergés par IIS

Les points de terminaison pour un service hébergé par IIS doivent être configurés à l'aide d'URI relatifs, pas d'adresses absolues. De cette manière, vous êtes certain que l'adresse du point de terminaison se situe dans le jeu des adresses URI qui appartiennent à l'application d'hébergement et que l'activation basée sur message se produit comme prévu.

Gestion des états et recyclage de processus

L'environnement d'hébergement IIS est optimisé pour les services qui ne maintiennent pas l'état local en mémoire. Les services IIS recyclent le processus hôte en réponse à divers événements externes et internes, ce qui peut entraîner la perte de tout état volatil stocké exclusivement dans la mémoire. Les services hébergés dans IIS doivent stocker leur état en dehors du processus (par exemple, dans une base de données) ou dans un cache en mémoire qui peut être recréé facilement si un événement de recyclage d'application se produit.

Aa751802.note(fr-fr,VS.90).gifRemarque :
Les protocoles utilisés par WCF pour la fiabilité et la sécurité au niveau de la couche de message et font appel à l'état en mémoire volatile. Les sessions de sécurité et les sessions fiables WCF peuvent se terminer de façon inattendue en raison du recyclage d'application. Les applications hébergées par IIS qui utilisent ces protocoles doivent soit dépendre d'un autre élément que la clé de session fournie par WCF pour corréler l'état au niveau de la couche application (par exemple, une construction au niveau de la couche application ou un en-tête de corrélation personnalisé), soit désactiver le recyclage de processus IIS pour l'application hébergée.

Optimisation des performances dans les scénarios de couche intermédiaire

Pour des performances optimales dans un scénario de couche intermédiaire (un service qui appelle d'autres services en réponse à des messages entrants), instanciez le client du service WCF au service distant une fois et réutilisez-le dans plusieurs requêtes entrantes. L'instanciation des clients du service WCF est une opération coûteuse par rapport à un appel de service sur une instance cliente préexistante, et les scénarios de couche intermédiaire offrent des gains de performances distincts en mettant en cache des clients distants sur les demandes. Les clients du service WCF sont thread-safe, donc il n'est pas nécessaire de synchroniser l'accès à un client sur plusieurs threads.

Les scénarios de couche intermédiaire produisent également des gains de performance en utilisant les API asynchrones générées par l'option svcutil /a. L'option /a entraîne la génération par ServiceModel Metadata Utility Tool (Svcutil.exe) de méthodes BeginXXX/EndXXX pour chaque opération de service, ce qui permet d'effectuer des appels potentiellement longs aux services distants sur les threads d'arrière-plan.

WCF dans des scénarios multi-résidents ou multi-nommés

Vous pouvez déployer des services WCF dans une batterie de serveurs Web IIS où un ensemble d'ordinateurs partage un nom externe commun (tel que https://www.contoso.com) mais sont adressés individuellement par des noms d'hôte différents (par exemple, https://www.contoso.com peut diriger le trafic vers deux ordinateurs différents nommés http://machine1.internal.contoso.com et http://machine2.internal.contoso.com). Ce scénario de déploiement est complètement pris en charge par WCF, mais requiert une configuration spéciale du site Web IIS qui héberge des services WCF pour afficher le nom d'hôte correct (externe) dans les métadonnées du service (Web Services Description Language).

Pour garantir que le nom d'hôte correct apparaisse dans les métadonnées du service générées par WCF, configurez l'identité par défaut pour le site Web IIS qui héberge des services WCF afin d'utiliser un nom d'hôte explicite. Par exemple, les ordinateurs qui résident dans la ferme www.contoso.com doivent utiliser une liaison de site IIS de *:80:www.contoso.com pour HTTP et *:443:www.contoso.com pour HTTPS.

Vous pouvez configurer des liaisons de site Web IIS en utilisant le composant logiciel enfichable IIS Microsoft Management Console (MMC).

Les pools d'applications qui s'exécutent dans des contextes d'utilisateur différents remplacent des assemblys d'autres comptes dans le dossier temporaire

Pour garantir que les pools d'applications qui s'exécutent dans les contextes d'utilisateur différents ne peuvent pas remplacer d'assemblys d'autres comptes dans le dossier des fichiers ASP.NET temporaire, utilisez des identités et des dossiers temporaires différents pour des applications différentes. Par exemple, si vous avez deux applications virtuelles /Application1 et / Application2, vous pouvez créer deux pools d'applications, A et B, avec deux identités différentes. Le pool d'applications A peut s'exécuter sous une identité d'utilisateur (user1), et le pool d'applications B peut s'exécuter sous une autre identité d'utilisateur (user2), et configurer /Application1 pour utiliser A et /Application2 pour utiliser B.

Dans Web.config, vous pouvez configurer le dossier temporaire à l'aide de <system.web/compilation/@tempFolder>. Pour /Application1, cela peut être "c:\tempForUser1" et pour application2, "c:\tempForUser2". Accordez l'autorisation en écriture correspondante à ces dossiers pour les deux identités.

Dès lors, user2 ne peut pas modifier le dossier de génération du code pour /application2 (sous c:\tempForUser1).

Voir aussi

Autres ressources

Service Hosting Samples