Déploiement d'un service WCF hébergé dans Internet Information Services
Le développement et le déploiement d'un service Windows Communication Foundation (WCF) hébergé dans les services IIS (Internet Information Services) se compose des tâches suivantes :
- Vérifier que les services IIS, WCF et le composant d'activation WCF sont installés et enregistrés correctement.
- Créer une application IIS ou réutiliser une application ASP.NET existante.
- Créer un fichier .svc pour le service WCF.
- Déployer l'implémentation de service vers l'application IIS.
- Configurer le service WCF.
Pour une procédure pas à pas détaillée de la création d'un service WCF hébergé dans IIS, consultez Comment : héberger un service WCF dans IIS.
Vérifier que les services IIS et WCF sont installés et enregistrés correctement
WCF et les services IIS doivent être installés pour que les services WCF hébergés dans IIS fonctionnent correctement. Les procédures d'installation de WCF (dans le cadre du .NET Framework 3.0) et IIS varient selon la version du système d'exploitation utilisé. Pour plus d'informations sur l'installation de WCF et du .NET Framework 3.0, consultez Microsoft .NET Framework 3.0 Redistributable Package. Les instructions pour installer les services IIS se trouvent à la page Installation d'IIS (page pouvant être en anglais).
Le processus d'installation pour le .NET Framework 3.0 enregistre automatiquement WCF auprès des services IIS s'ils sont déjà présents sur l'ordinateur. Si les services IIS sont installés après le .NET Framework 3.0, une étape supplémentaire est requise pour enregistrer WCF auprès des services IIS et de ASP.NET. Pour ce faire, procédez comme suit selon votre système d'exploitation :
- Windows XP SP2 et Windows Server 2003 : utilisez l'outil ServiceModelReg.exe pour enregistrer WCF auprès des services IIS : pour utiliser cet outil, tapez ServiceModelReg.exe /i /x à une invite de commandes.
- Windows Vista : installez le sous-composant Windows Communication Foundation Activation Components du .NET Framework 3.0. Pour ce faire, dans le Panneau de configuration, cliquez sur Ajout/Suppression de programmes, puis sur Ajouter/Supprimer des composants Windows. Cette procédure active l'Assistant Composants de Windows.
Créer une nouvelle application IIS ou réutiliser une application ASP.NET existante
Les services WCF hébergés dans IIS doivent résider dans une application IIS. Vous pouvez créer une nouvelle application IIS pour héberger des services WCF exclusivement. Vous pouvez également déployer un service WCF dans une application existante qui héberge déjà le contenu ASP.NET 2.0 (tel que des pages .aspx et des services Web ASP.NET [ASMX]). Pour plus d'informations sur ces options, consultez les sections « Hébergement côte à côte de WCF avec ASP.NET » et « Hébergement des services WCF en mode de compatibilité ASP.NET » dans Services WCF et ASP.NET.
Notez que IIS 6.0 et les versions ultérieures redémarrent périodiquement une application de programmation orientée objet isolée. La valeur par défaut est 1740 minutes. La valeur maximale est de 71,582 minutes. Ce redémarrage peut être désactivé. Pour plus d'informations sur cette propriété, consultez PeriodicRestartTime.
Créer un fichier .svc pour le service WCF
Les services WCF hébergés dans IIS sont représentés sous la forme de fichiers de contenu spéciaux (fichiers .svc) à l'intérieur de l'application IIS. Ce modèle est semblable à la façon dont les pages ASMX sont représentées dans une application IIS sous la forme de fichiers .asmx. Un fichier .svc contient une directive de traitement spécifique à WCF (@ServiceHost) qui autorise l'infrastructure d'hébergement WCF à activer des services hébergés en réponse à des messages entrants. La syntaxe la plus courante d'un fichier .svc se trouve dans l'instruction suivante.
<% @ServiceHost Service=”MyNamespace.MyServiceImplementationTypeName” %>
Elle se compose de la directive @ServiceHost et d'un attribut unique, Service. La valeur de l'attribut Service est le nom de type du Common Language Runtime (CLR) de l'implémentation de service. L'utilisation de cette directive revient essentiellement à créer un hôte de service à l'aide du code suivant :
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
La configuration d'hébergement supplémentaire, telle que la création d'une liste d'adresses de base pour le service peut aussi être effectuée. Vous pouvez aussi utiliser un ServiceHostFactory personnalisé pour étendre la directive et l'utiliser avec des solutions d'hébergement personnalisées. Les applications IIS qui hébergent les services WCF ne sont pas chargées de gérer la création et la durée de vie des instances ServiceHost. L'infrastructure d'hébergement WCF managée crée dynamiquement l'instance ServiceHost nécessaire lorsque la première demande est reçue pour le fichier .svc. L'instance n'est pas libérée tant qu'elle n'est pas fermée explicitement par le code ou que l'application est recyclée.
Pour plus d'informations sur la syntaxe pour les fichiers .svc, consultez @ServiceHost.
Déployer l'implémentation de service vers l'application IIS
Les services WCF hébergés dans IIS utilisent le même modèle de compilation dynamique que ASP.NET 2.0. Comme dans ASP.NET, vous pouvez déployer de plusieurs façons le code d'implémentation pour les services WCF hébergés dans IIS à différents emplacements, comme suit :
- Sous forme d'un fichier .dll précompilé situé dans le cache d'assembly global (GAC, Global Assembly Cache) ou dans le répertoire \bin de l'application. Les binaires précompilés ne sont pas mis à jour tant qu'une nouvelle version de la bibliothèque de classes n'a pas été déployée.
- Sous la forme de fichiers sources non compilés situés dans le répertoire \App_Code de l'application. Les fichiers sources situés dans ce répertoire sont requis dynamiquement lors du traitement de la première demande de l'application. Les modifications apportées aux fichiers dans le répertoire \App_Code provoque le recyclage et la recompilation de l'application toute entière lorsque la demande suivante est reçue.
- Sous la forme de code non compilé placé directement dans le fichier .svc. Le code d'implémentation peut aussi être situé inline dans le fichier .svc du service, après la directive @ServiceHost. Les transformations apportées au code inline provoquent le recyclage et la recompilation de l'application lorsque la demande suivante est reçue.
Pour plus d'informations sur le modèle de compilation ASP.NET 2.0, consultez Vue d'ensemble de la compilation ASP.NET (page pouvant être en anglais).
Configurer le service WCF
Les services WCF hébergés dans IIS stockent leur configuration dans le fichier Web.config des applications. Les services hébergés dans IIS utilisent la même syntaxe et les mêmes éléments de configuration que les services WCF hébergés en dehors des services IIS. Toutefois, les contraintes suivantes sont uniques à l'environnement d'hébergement IIS :
- Adresses de base pour les services hébergés dans IIS.
- Les applications qui hébergent des services WCF en dehors des services IIS peuvent contrôler l'adresse de base des services qu'elles hébergent en passant un ensemble d'URI d'adresse de base au constructeur ServiceHost ou en fournissant un élément <host> dans la configuration du service. Les services hébergés dans IIS n'ont pas la capacité de contrôler leur adresse de base ; l'adresse de base d'un service hébergé dans IIS est l'adresse de son fichier .svc.
Adresses de point de terminaison pour les services hébergés dans IIS
Lorsqu'elles sont hébergées dans IIS, les adresses de point de terminaison sont toujours considérées relatives à l'adresse du fichier .svc qui représente le service. Par exemple, si l'adresse de base d'un service WCF est https://localhost/Application1/MyService.svc avec la configuration de point de terminaison suivante.
<endpoint address=”anotherEndpoint” … />
Cela fournit un point de terminaison qui peut être atteint à l'adresse "https://localhost/Application1/MyService.svc/anotherEndpoint."
De la même façon, l'élément de configuration de point de terminaison qui utilise une chaîne vide comme l'adresse relative fournit un point de terminaison accessible à https://localhost/Application1/MyService.svc, qui est l'adresse de base.
<endpoint address=”” … />
Vous devez toujours utiliser des adresses de point de terminaison relatives pour les points de terminaison de service hébergés dans IIS. Indiquer une adresse de point de terminaison qualifiée complète (par exemple, https://localhost/MyService.svc) peut entraîner des erreurs dans le déploiement du service si l'adresse de point de terminaison ne pointe pas vers l'application IIS qui héberge le service exposant le point de terminaison. L'utilisation d'adresses de point de terminaison relatives pour les services hébergés évite ces risques de conflits.
Transports disponibles
Les services WCF hébergés dans IIS 5.1 et IIS 6.0 sont limités à l'utilisation de la communication basée sur HTTP. Sur ces plateformes IIS, configurer un service hébergé pour utiliser une liaison non-HTTP entraîne une erreur pendant l'activation du service. Pour IIS 7.0, les transports pris en charge incluent HTTP, Net.TCP, Net.Pipe, Net.MSMQ et msmq.formatname pour la compatibilité descendante avec les applications MSMQ existantes.
Sécurité de transport HTTP
Les services WCF hébergés dans IIS peuvent utiliser la sécurité de transport HTTP (par exemple, les méthodes d'authentification HTTP et HTTPS telles que l'authentification de base, Digest et intégrée à Windows) à condition que le répertoire virtuel IIS qui contient le service prenne en charge ces paramètres. Les paramètres de la sécurité de transport HTTP sur la liaison d'un point de terminaison hébergé doivent correspondre aux paramètres de sécurité de transport sur le répertoire virtuel IIS qui la contient.
Par exemple, un point de terminaison WCF configuré pour utiliser l'authentification Digest HTTP doit résider dans un répertoire virtuel IIS qui est également configuré pour autoriser l'authentification Digest HTTP. Les combinaisons non appariées de paramètres IIS et de paramètres de point de terminaison WCF provoquent une erreur pendant l'activation de service.
Voir aussi
Concepts
Hébergement dans les services IIS (Internet Information Services)
Meilleures pratiques pour l'hébergement dans Internet Information Services