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 composent des tâches suivantes :
Vérifier que IIS, ASP.NET, WCF, ainsi que le composant d'activation WCF sont installés et inscrits correctement.
Créer une nouvelle 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 Guide pratique : héberger un service WCF dans IIS.
Vérifier que les services IIS, ASP.NET et WCF sont installés et enregistrés correctement
WCF, IIS et ASP.NET 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 de .NET Framework), d'ASP.NET et d'IIS varient selon le système d'exploitation. Pour plus d’informations sur l’installation de WCF et .NET Framework, consultez Installer le .NET Framework pour les développeurs. Pour installer IIS sur Windows 10, ouvrez Programmes et fonctionnalités dans Panneau de configuration, puis sélectionnez Activer ou désactiver les fonctionnalités Windows. Dans Fonctionnalités Windows, sélectionnez Internet Information Services, puis cliquez sur OK.
Vous trouverez des instructions sur l’installation d’IIS sur d’autres systèmes d’exploitation dans Installation d’IIS sur Windows Vista et Windows 7 et Installation d’IIS 8.5 sur Windows Server 2012 R2.
Le processus d'installation pour .NET Framework enregistre automatiquement WCF auprès des services IIS s'ils sont déjà présents sur l'ordinateur. Si IIS est installé après .NET Framework, une étape supplémentaire est requise pour inscrire WCF auprès d’IIS et ASP.NET. Pour ce faire, procédez comme suit selon votre système d'exploitation :
Windows 7 et Windows Server 2003 : utilisez l’outil ServiceModel Registration Tool (ServiceModelReg.exe) pour inscrire WCF auprès d’IIS. Pour exécuter l’outil, entrez
ServiceModelReg.exe /i /x
dans l’Invite de commandes développeur Visual Studio ou PowerShell pour développeurs Visual Studio.Windows 7 : enfin, vous devez vérifier qu'ASP.NET est configuré pour utiliser .NET Framework version 4 ou ultérieure. Pour cela, exécutez l'outil ASPNET_Regiis avec l'option
–i
. Pour plus d'informations, consultez ASP.NET IIS Registration Tool.
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. Sinon, déployez un service WCF dans une application existante qui héberge déjà le contenu ASP.NET 2.0 (tel que pages .aspx et 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 des 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 la façon dont ASP.NET 2.0 compile des projets, consultez Présentation de la compilation ASP.NET.
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 http://localhost/Application1/MyService.svc
avec la configuration de point de terminaison suivante :
<endpoint address="anotherEndpoint" />
Cela fournit un point de terminaison accessible à http://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 à http://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, http://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.