Partage via


Activation de NamedPipe

L’exemple NamedPipeActivation illustre l’hébergement d’un service qui utilise le service WAS (Windows Process Activation Service) pour activer un service qui communique sur des canaux nommés. Cet exemple est basé sur la prise en main et nécessite l’exécution de Windows Vista.

Remarque

La procédure de configuration et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.

Exemples de détails

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 les services d’activation de processus Windows (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 indiqué 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);
}

Le client effectue des requêtes synchrones à une opération mathématique donnée et l’implémentation de 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 liaison modifiée netNamedPipeBinding sans sécurité. La liaison est spécifiée dans les fichiers de configuration du client et du service. Le type de liaison du service est spécifié dans l’attribut binding de l’élément de point de terminaison, comme indiqué dans l’exemple de configuration suivant.

Si vous souhaitez utiliser une liaison de canal nommé sécurisée, remplacez le mode de sécurité du serveur par le paramètre de sécurité souhaité et réexécutez svcutil.exe sur le client pour obtenir un fichier de configuration client mis à jour.

<system.serviceModel>
        <services>
            <service name="Microsoft.ServiceModel.Samples.CalculatorService"
               behaviorConfiguration="CalculatorServiceBehavior">

        <!-- This endpoint is exposed at the base address provided by host: net.pipe://localhost/servicemodelsamples/service.svc  -->
        <endpoint address=""
                  binding="netNamedPipeBinding"
                  bindingConfiguration="Binding1"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- the mex endpoint is exposed at net.pipe://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexNamedPipeBinding"
                  contract="IMetadataExchange" />
      </service>
        </services>
        <bindings>
            <netNamedPipeBinding>
                <binding name="Binding1" >
                    <security mode = "None">
                    </security>
                </binding >
            </netNamedPipeBinding>
        </bindings>

    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

Les informations de point de terminaison du client sont configurées comme indiqué dans l’exemple de code suivant.

<system.serviceModel>

    <client>
      <endpoint name=""
                          address="net.pipe://localhost/servicemodelsamples/service.svc"
                          binding="netNamedPipeBinding"
                          bindingConfiguration="Binding1"
                          contract="Microsoft.ServiceModel.Samples.ICalculator" />
    </client>

    <bindings>

      <!--  Following is the expanded configuration section for a NetNamedPipeBinding.
            Each property is configured with the default value. -->

      <netNamedPipeBinding>
        <binding name="Binding1"
                         maxBufferSize="65536"
                         maxConnections="10">
          <security mode = "None">
          </security>
        </binding >

      </netNamedPipeBinding>
    </bindings>

  </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

  1. Vérifiez que IIS 7.0 est installé. IIS 7.0 est requis pour l’activation WAS.

  2. 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 :

    1. Dans le menu Démarrer , choisissez Panneau de configuration.

    2. Sélectionnez Programmes et fonctionnalités.

    3. Cliquez sur Activer ou désactiver les composants Windows.

    4. Développez le nœud Microsoft .NET Framework 3.0 et vérifiez la fonctionnalité d’activation non HTTP de Windows Communication Foundation .

  3. Configurez le service d'activation des processus Windows pour prendre en charge l'activation de canal nommé.

    Par commodité, les deux étapes suivantes sont implémentées dans un fichier de commandes appelé AddNetPipeSiteBinding.cmd situé dans l’exemple de répertoire.

    1. Pour prendre en charge l’activation net.pipe, le site web par défaut doit d’abord être lié au protocole net.pipe. Pour ce faire, utilisez appcmd.exe, qui est installé avec l’ensemble d’outils de gestion IIS 7.0. À partir d'une invite de commandes avec élévation de privilèges (administrateur), exécutez la commande suivante.

      %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site"
      -+bindings.[protocol='net.pipe',bindingInformation='*']
      

      Remarque

      Cette commande est une seule ligne de texte.

      Cette commande ajoute une liaison de site net.pipe au site web par défaut.

    2. Bien que toutes les applications d’un site partagent une liaison net.pipe commune, chaque application peut activer la prise en charge de net.pipe individuellement. Pour activer net.pipe pour l’application /servicemodelsamples, exécutez la commande suivante à partir d’une invite de commandes avec élévation de privilèges.

      %windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipe
      

      Remarque

      Cette commande est une seule ligne de texte.

      Cette commande permet à l’application /servicemodelsamples d’être accessible à l’aide des deux http://localhost/servicemodelsamples et net.tcp://localhost/servicemodelsamples.

  4. 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.

  5. Supprimez la liaison du site net.pipe 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é RemoveNetPipeSiteBinding.cmd situé dans l’exemple de répertoire :

    1. Supprimez net.tcp de la liste des protocoles activés en exécutant la commande suivante à partir d’une invite de commandes avec élévation de privilèges.

      %windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http
      

      Remarque

      Cette commande doit être entrée sous la forme d’une seule ligne de texte.

    2. Supprimez la liaison du site net.tcp en exécutant la commande suivante à partir d’une invite de commandes avec élévation de privilèges.

      %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.pipe',bindingInformation='*']
      

      Remarque

      Cette commande doit être tapée sous la forme d’une seule ligne de texte.

Voir aussi