Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple TCPActivation illustre l’hébergement d’un service qui utilise les services d’activation de processus Windows (WAS) pour activer un service qui communique via le protocole net.tcp. Cet exemple est basé sur la section Getting Started.
Remarque
La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.
L’exemple se compose d’un programme de console client (.exe) et d’une bibliothèque de services (.dll) hébergée dans un processus de travail activé par WAS. L’activité du client est visible dans la fenêtre de console.
Le service implémente un contrat qui définit un modèle de communication de demande-réponse. Le contrat est défini par l’interface ICalculator , qui expose des opérations mathématiques (Ajouter, Soustraire, Multiplier et Diviser), comme illustré dans l’exemple de code suivant :
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
L’implémentation du service calcule et retourne le résultat approprié :
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
L’exemple utilise une variante de la liaison net.tcp avec le partage de ports TCP activé et la sécurité désactivée. Si vous souhaitez utiliser une liaison TCP sécurisée, remplacez le mode de sécurité du serveur par le paramètre souhaité et réexécutez Svcutil.exe sur le client pour générer un fichier de configuration client de mise à jour.
L’exemple suivant montre la configuration du service :
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by host: net.tcp://localhost/servicemodelsamples/service.svc -->
<endpoint binding="netTcpBinding" bindingConfiguration="PortSharingBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- the mex endpoint is exposed at net.tcp://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="PortSharingBinding" portSharingEnabled="true">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Le point de terminaison du client est configuré comme indiqué dans l’exemple de code suivant :
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_ICalculator">
<security mode="None"/>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost/servicemodelsamples/service.svc"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ICalculator"
contract="Microsoft.ServiceModel.Samples.ICalculator" name="NetTcpBinding_ICalculator" />
</client>
</system.serviceModel>
Lorsque vous exécutez l’exemple, les demandes et réponses de l’opération s’affichent dans la fenêtre de la console cliente. Appuyez sur Entrée dans la fenêtre du client pour arrêter le client.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
Pour configurer, générer et exécuter l’exemple
Vérifiez que IIS 7.0 est installé. IIS 7.0 est requis pour l’activation WAS.
Vérifiez que vous avez effectué la procédure d’installationOne-Time pour les exemples Windows Communication Foundation.
En outre, vous devez installer les composants d’activation WCF non HTTP :
Dans le menu Démarrer , choisissez Panneau de configuration.
Sélectionnez Programmes et fonctionnalités.
Cliquez sur Activer ou désactiver les composants Windows.
Développez le nœud Microsoft .NET Framework 3.0 et vérifiez la fonctionnalité d’activation non HTTP de Windows Communication Foundation .
Configurez WAS pour prendre en charge l’activation TCP.
Par souci de commodité, les deux étapes suivantes sont implémentées dans un fichier de commandes appelé AddNetTcpSiteBinding.cmd situé dans l’exemple de répertoire.
Pour prendre en charge l’activation net.tcp, le site web par défaut doit d’abord être lié à un port net.tcp. Cela peut être effectué à l’aide de Appcmd.exe, qui est installé avec l’ensemble d’outils de gestion Internet Information Services 7.0 (IIS). À partir d’une invite de commandes au niveau de l’administrateur, exécutez la commande suivante :
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']Conseil / Astuce
Cette commande est une seule ligne de texte. Cette commande ajoute une liaison de site net.tcp au site Web par défaut qui écoute sur le port TCP 808, quel que soit le nom d’hôte.
Bien que toutes les applications au sein d’un site partagent une liaison net.tcp commune, chaque application peut activer la prise en charge de net.tcp individuellement. Pour activer net.tcp pour l’application /servicemodelsamples, exécutez la commande suivante à partir d’une invite de commandes au niveau de l’administrateur :
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.tcpRemarque
Cette commande est une seule ligne de texte. Cette commande permet à l’application /servicemodelsamples d’être accessible à l’aide des deux
http://localhost/servicemodelsamplesetnet.tcp://localhost/servicemodelsamples.
Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.
Pour exécuter l’exemple dans une configuration monoposte ou multiposte, suivez les instructions de Exécution des exemples Windows Communication Foundation.
Supprimez la liaison de site net.tcp que vous avez ajoutée pour cet exemple.
Par souci de commodité, les deux étapes suivantes sont implémentées dans un fichier de commandes appelé RemoveNetTcpSiteBinding.cmd situé dans l’exemple de répertoire.
Supprimez net.tcp de la liste des protocoles activés en exécutant la commande suivante à partir d’une invite de commandes au niveau de l’administrateur :
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:httpRemarque
Cette commande doit être entrée sous la forme d’une seule ligne de texte.
Supprimez la liaison de site net.tcp en exécutant la commande suivante à partir d'une invite de commandes en tant qu'administrateur :
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.tcp',bindingInformation='808:*']Remarque
Cette commande doit être tapée sous la forme d’une seule ligne de texte.