Partager via


Comment : héberger un service de workflow dans IIS

Les services de workflow peuvent être hébergés dans IIS (Internet Information Services) d'une manière similaire aux services Windows Communication Foundation (WCF) hébergés par IIS, à l'aide du service et de fichiers de configuration Web et de certains codes d'application. L'hébergement dans IIS permet à un service de workflow de tirer parti de fonctionnalités IIS, telles que le recyclage automatique du processus, le contrôle d'état de processus, et ainsi de suite.

Il y a trois façons d'héberger un service de workflow dans IIS. La première consiste à référencer une définition de workflow pré-compilée dans un fichier .svc. La deuxième consiste à utiliser un fichier de balisage de workflow avec une extension .xoml. La troisième consiste à référencer un fichier de balisage de workflow dans un fichier .svc.

La deuxième méthode fournit les fonctionnalités de recyclage automatique sur une mise à jour du fichier .xoml ou .rules. La dernière méthode est fournie pour des scénarios d'extensibilité, tels que l'implémentation d'un WorkflowServiceHost personnalisé pour héberger la balise de workflow.

NoteRemarque :

Lors du déploiement d'un service de workflow en tant que code dans les fichiers source autonomes dans le répertoire App_Code ou du service utilisant le modèle ASP.NET avec code intégré, vous devez référencer les assemblys de workflow dans votre fichier Web.config à l'aide de l'élément de configuration <compilation> tel qu'indiqué dans l'exemple suivant :

<system.web>
    <compilation>
      <assemblies>
        <add assembly="System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add assembly="System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add assembly="System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </assemblies>
    </compilation>
  </system.web>
NoteRemarque :

Le compilateur de workflow n'est pas utilisé lorsque les workflows avec code intégrés sont hébergés dans IIS. Seuls les compilateurs spécifiques à une langue, tels que le compilateur C#, sont utilisés.

Pour héberger une définition de workflow précompilée comme un service dans IIS

  1. Confirmez que IIS est installé et s'exécute sur votre ordinateur.

  2. Créez un répertoire virtuel pour votre service de workflow et assurez-vous qu'ASP.NET y accède.

  3. Créez un fichier de service avec une extension .svc. Modifiez ce fichier en ajoutant les informations directrices ServiceHost appropriées pour le service de workflow. La valeur Factory doit faire référence à la classe WorkflowServiceHostFactory. L'exemple suivant affiche un fichier de service avec les valeurs appropriées.

    <%@ServiceHost language=c# Debug="true" Service="Microsoft.WorkflowServices.Samples.StateMachineCalculatorService" Factory="System.ServiceModel.Activation.WorkflowServiceHostFactory" %>
    
  4. Créez un sous-répertoire Bin dans le répertoire virtuel que vous avez créé à l'étape 2.

  5. Placez l'assembly qui contient votre type de service de workflow dans le répertoire Bin.

  6. Créez un fichier nommé Web.config dans le répertoire de l'application. Pour exécuter le service, le fichier Web.config doit se situer dans le même répertoire que le fichier du service.

  7. Ajoutez le code de configuration approprié au fichier. Au moment de l'exécution, l'infrastructure WCF utilise les informations pour construire un point de terminaison avec lequel les applications clientes peuvent communiquer. Pour l'exemple StateMachineCalculatorService, le code de configuration est le suivant :

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
      <system.serviceModel>
        <services>
          <service name="Microsoft.WorkflowServices.Samples.StateMachineCalculatorService" behaviorConfiguration="ServiceBehavior" >
            <endpoint address="" 
                      binding="customBinding"
                      bindingConfiguration="basicHttpCookieBinding"
                      contract="Microsoft.WorkflowServices.Samples.ICalculator" />
            <endpoint address="ContextOverHttp" 
                      binding="wsHttpContextBinding" 
                      contract="Microsoft.WorkflowServices.Samples.ICalculator" />
          </service>
        </services>
    
        <behaviors>
          <serviceBehaviors>
            <behavior name="ServiceBehavior"  >
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceCredentials>
                <windowsAuthentication
                    allowAnonymousLogons="false"
                    includeWindowsGroups="true" />
              </serviceCredentials>
              <!-- Comment out the following behavior to disable persistence store -->
              <workflowRuntime name="WorkflowServiceHostRuntime" validateOnCreate="true" enablePerformanceCounters="true">
                <services>
                  <add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                       connectionString="Data Source=localhost\sqlexpress;Initial Catalog=NetFx35Samples_ServiceWorkflowStore;Integrated Security=True;Pooling=False"
                       LoadIntervalSeconds="1" UnLoadOnIdle= "true" />
                </services>
              </workflowRuntime>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
        <bindings>
          <customBinding>
            <binding name="basicHttpCookieBinding">
              <context contextExchangeMechanism="HttpCookie" />
              <textMessageEncoding messageVersion="Soap11" />
              <httpTransport authenticationScheme="Ntlm" />
            </binding>
          </customBinding>
        </bindings>
    
      </system.serviceModel>
    
      <system.web>
        <compilation>
          <assemblies>
            <add assembly="System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
          </assemblies>
        </compilation>
      </system.web>
    
    </configuration>
    

Pour héberger une définition de workflow déclarative comme un service dans IIS

  1. Confirmez que IIS est installé et s'exécute sur votre ordinateur.

  2. Créez un répertoire virtuel pour votre service de workflow et assurez-vous qu'ASP.NET y accède.

  3. Placez le fichier de balisage de workflow (avec l'extension .xoml) et un fichier de balisage de règle facultatif du même nom (avec l'extension .rules) dans le répertoire virtuel.

  4. Créez un fichier nommé Web.config dans le répertoire de l'application. Pour exécuter le service, le fichier Web.config doit se situer dans le même répertoire que le fichier du service.

  5. Ajoutez le code de configuration approprié au fichier. Au moment de l'exécution, l'infrastructure WCF utilise les informations pour construire un point de terminaison avec lequel les applications clientes peuvent communiquer. Pour l'exemple StateMachineCalculatorService, le code de configuration est le suivant :

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
      <system.serviceModel>
        <services>
    <!-- Service name is workflow Name -->
          <service name="StateMachineCalculatorService" behaviorConfiguration="ServiceBehavior" >
            <endpoint address="" 
                      binding="customBinding"
                      bindingConfiguration="basicHttpCookieBinding"
                      contract="Microsoft.WorkflowServices.Samples.ICalculator" />
            <endpoint address="ContextOverHttp" 
                      binding="wsHttpContextBinding" 
                      contract="Microsoft.WorkflowServices.Samples.ICalculator" />
          </service>
        </services>
    
        <behaviors>
          <serviceBehaviors>
            <behavior name="ServiceBehavior"  >
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceCredentials>
                <windowsAuthentication
                    allowAnonymousLogons="false"
                    includeWindowsGroups="true" />
              </serviceCredentials>
              <!-- Comment out the following behavior to disable persistence store -->
              <workflowRuntime name="WorkflowServiceHostRuntime" validateOnCreate="true" enablePerformanceCounters="true">
                <services>
                  <add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                       connectionString="Data Source=localhost\sqlexpress;Initial Catalog=NetFx35Samples_ServiceWorkflowStore;Integrated Security=True;Pooling=False"
                       LoadIntervalSeconds="1" UnLoadOnIdle= "true" />
                </services>
              </workflowRuntime>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
        <bindings>
          <customBinding>
            <binding name="basicHttpCookieBinding">
              <context contextExchangeMechanism="HttpCookie" />
              <textMessageEncoding messageVersion="Soap11" />
              <httpTransport authenticationScheme="Ntlm" />
            </binding>
          </customBinding>
        </bindings>
    
      </system.serviceModel>
    
      <system.web>
        <compilation>
          <assemblies>
            <add assembly="System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
          </assemblies>
        </compilation>
      </system.web>
    
    </configuration>
    
NoteRemarque :

Le fichier de balisage de workflow fera partie de l'adresse de base du service de workflow. Par exemple, l'adresse de base peut se présenter comme suit :

http://servername:port/workflowmarkupfile.xoml/

Pour héberger une définition de workflow déclarative comme un service avec un fichier .svc

  1. Confirmez que IIS est installé et s'exécute sur votre ordinateur.

  2. Créez un répertoire virtuel pour votre service de workflow et assurez-vous qu'ASP.NET y accède.

  3. Placez le fichier de balisage de workflow (avec l'extension .xoml) et un fichier de balisage de règle facultatif du même nom (avec l'extension .rules) dans le répertoire virtuel.

  4. Placez la directive de service (avec l'extension .svc) avec la balise suivante dans le même répertoire :

    <%@ServiceHost language=c# Debug="true" Service="Calculator.xoml" Factory="System.ServiceModel.Activation.WorkflowServiceHostFactory" %>
    
  5. Créez un fichier nommé Web.config dans le répertoire de l'application ; pour exécuter le service, le fichier Web.config doit se situer dans le même répertoire que le fichier du service.

  6. Ajoutez le code de configuration approprié au fichier. Au moment de l'exécution, l'infrastructure WCF utilise les informations pour construire un point de terminaison avec lequel les applications clientes peuvent communiquer. Pour l'exemple StateMachineCalculatorService, le code de configuration est le suivant :

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
      <system.serviceModel>
        <services>
    <!-- Service name is workflow Name -->
          <service name="StateMachineCalculatorService" behaviorConfiguration="ServiceBehavior" >
            <endpoint address="" 
                      binding="customBinding"
                      bindingConfiguration="basicHttpCookieBinding"
                      contract="Microsoft.WorkflowServices.Samples.ICalculator" />
            <endpoint address="ContextOverHttp" 
                      binding="wsHttpContextBinding" 
                      contract="Microsoft.WorkflowServices.Samples.ICalculator" />
          </service>
        </services>
    
        <behaviors>
          <serviceBehaviors>
            <behavior name="ServiceBehavior"  >
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceCredentials>
                <windowsAuthentication
                    allowAnonymousLogons="false"
                    includeWindowsGroups="true" />
              </serviceCredentials>
              <!-- Comment out the following behavior to disable persistence store -->
              <workflowRuntime name="WorkflowServiceHostRuntime" validateOnCreate="true" enablePerformanceCounters="true">
                <services>
                  <add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                       connectionString="Data Source=localhost\sqlexpress;Initial Catalog=NetFx35Samples_ServiceWorkflowStore;Integrated Security=True;Pooling=False"
                       LoadIntervalSeconds="1" UnLoadOnIdle= "true" />
                </services>
              </workflowRuntime>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
        <bindings>
          <customBinding>
            <binding name="basicHttpCookieBinding">
              <context contextExchangeMechanism="HttpCookie" />
              <textMessageEncoding messageVersion="Soap11" />
              <httpTransport authenticationScheme="Ntlm" />
            </binding>
          </customBinding>
        </bindings>
    
      </system.serviceModel>
    
      <system.web>
        <compilation>
          <assemblies>
            <add assembly="System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
          </assemblies>
        </compilation>
      </system.web>
    
    </configuration>
    

Voir aussi

Autres ressources

Création de services de workflow et de services fiables

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.