Parallele Versionsverwaltung in WorkflowServiceHostSide by Side Versioning in WorkflowServiceHost

Die WorkflowServiceHost in .NET Framework 4.5 eingeführte side-by-side-Versionierung bietet die Möglichkeit, mehrere Versionen eines Workflowdienstes auf einem einzelnen Endpunkt zu hosten.The WorkflowServiceHost side-by-side versioning introduced in .NET Framework 4.5 provides the capability to host multiple versions of a workflow service on a single endpoint. Mit der parallelen Funktionalität lässt sich ein Workflowdienst so konfigurieren, dass neue Instanzen des Workflowdiensts mithilfe der neuen Workflowdefinition erstellt werden, während gegenwärtig ausgeführte Instanzen auf Grundlage der vorhandenen Definition abgeschlossen werden.The side-by-side functionality provided allows a workflow service to be configured so that new instances of the workflow service are created using the new workflow definition, while running instances complete using the existing definition. Dieses Thema bietet eine Übersicht über die parallele Ausführung des Workflowdiensts mit WorkflowServiceHost.This topic provides an overview of workflow service side-by-side execution using WorkflowServiceHost.

Hinweis

Informationen zum Herunterladen eines Beispiels und zum Anschauen einer Video-Exemplar-Vorgehensweise für die Workflow-Service-Seite-Versionierung finden Sie unter Side by Side Versioning with a Web-Hosted Xamlx Workflow Service.To download a sample and watch a video walkthrough of workflow service side-by-side versioning, see Side by Side Versioning with a Web-Hosted Xamlx Workflow Service.

Hosten mehrerer Versionen in einem WorkflowdienstHosting Multiple Versions in a Workflow Service

WorkflowServiceHost enthält zwei Eigenschaften, die so konfiguriert werden können, dass mehrere Versionen eines Workflows parallel ausgeführt werden: SupportedVersions und DefinitionIdentity.WorkflowServiceHost contains two properties that can be configured to allow multiple versions of a workflow to execute side-by-side: SupportedVersions and DefinitionIdentity. SupportedVersions enthält die unterstützten Versionen des Workflowdiensts, und mit DefinitionIdentity lassen sich die einzelnen Workflowdienste eindeutig identifizieren.SupportedVersions contains the supported versions of the workflow service, and DefinitionIdentity is used to uniquely identify each workflow service. Dazu wird dem Workflowdienst eine WorkflowIdentity zugeordnet.This is done by associating a WorkflowIdentity with the workflow service. Eine WorkflowIdentity enthält drei Identifizierungsinformationen.A WorkflowIdentity contains three identifying pieces of information. Name und Version enthalten einen Namen und eine Version und sind erforderlich. Package ist optional und kann verwendet werden, um eine zusätzliche Zeichenfolge anzugeben, die Informationen wie den Assemblynamen oder andere gewünschte Informationen enthält.Name and Version contain a name and a Version and are required, and Package is optional and can be used to specify an additional string containing information such as assembly name or other desired information. Jeder Workflowdienst in der SupportedVersions-Auflistung muss über eine eindeutige WorkflowIdentity verfügen.Each workflow service contained in the SupportedVersions collection must have a unique WorkflowIdentity. WorkflowIdentity ist eindeutig, wenn jede ihrer drei Eigenschaften sich von einer anderen WorkflowIdentity unterscheidet.A WorkflowIdentity is unique if any of its three properties are different from another WorkflowIdentity. A null WorkflowIdentity ist ein zulässiger Wert für DefinitionIdentity, aber nur eine null WorkflowIdentityvorherige Version eines Workflowdienstes kann eine haben.A null WorkflowIdentity is an allowable value for DefinitionIdentity, but only one previous version of a workflow service may have a null WorkflowIdentity.

Wichtig

WorkflowIdentity sollte keine persönlich identifizierbaren Informationen (PII) enthalten.A WorkflowIdentity should not contain any personally identifiable information (PII). WorkflowIdentity besteht aus drei Teilen: einem Name (String), einer Version (Version) und einem Package (String).WorkflowIdentity is composed of three parts: a Name (String), a Version (Version), and a Package (String). Informationen über die WorkflowIdentity-Aktivität, mit der eine Instanz erstellt wird, werden von der Laufzeit zu verschiedenen Zeiten des Aktivitätslebenszyklus an alle konfigurierten Überwachungsdienste ausgegeben.Information about the WorkflowIdentity used to create an instance is emitted to any configured tracking services at several different points of the activity life-cycle by the runtime. Die WF-Nachverfolgung besitzt keinen Mechanismus, um PII (vertrauliche Benutzerdaten) auszublenden.WF Tracking does not have any mechanism to hide PII (sensitive user data). Daher sollte eine WorkflowIdentity-Instanz keine PII-Daten enthalten, die möglicherweise von der Laufzeit in die Überwachungsdatensätze ausgegeben werden und so für jede Person mit Anzeigerechten für Überwachungsdatensätze sichtbar sind.Therefore, a WorkflowIdentity instance should not contain any PII data as it will be emitted by the runtime in tracking records and may be visible to anyone with access to view the tracking records.

Regeln für das Hosting mehrerer Versionen eines WorkflowdienstsRules for Hosting Multiple Versions of a Workflow Service

Wenn ein Benutzer dem WorkflowServiceHost eine zusätzliche Version hinzufügt, müssen mehrere Bedingungen erfüllt sein, damit ein Workflowdienst mit denselben Endpunkten und derselben Beschreibung gehostet werden kann.When a user adds an additional version to the WorkflowServiceHost, there are several conditions that must be met in order for a workflow service to be hosted with the same set of endpoints and description. Wenn eine der zusätzlichen Versionen diese Bedingungen nicht erfüllt, löst der WorkflowServiceHost beim Aufruf von Open eine Ausnahme aus.If any of the additional versions fail to meet these conditions, the WorkflowServiceHost throws an exception when Open is called. Jede Workflowdefinition, die für den Host als zusätzliche Version bereitgestellt wird, muss die folgenden Anforderungen erfüllen (wobei die primäre Version die Workflowdefinition ist, die für den Hostkonstruktor bereitgestellt wird).Each workflow definition provided to the host as an additional version must meet the following requirements (where the primary version is the workflow service definition that is provided to the host constructor). Für die zusätzliche Workflowversion gilt:The additional workflow version must:

  • Sie muss über den gleichen Name wie die primäre Version des Workflowdiensts verfügen.Have the same the Name as the primary version of the workflow service.

  • Sie darf im Receive keine SendReply-Aktivität oder Body-Aktivität enthalten, die nicht in der primären Version enthalten ist, und muss mit dem Vorgangsvertrag übereinstimmen.Must not have any Receive or SendReply activities in its Body that are not in the primary version, and they must match the operation contract.

  • Sie muss eine eindeutige DefinitionIdentity aufweisen.Have a unique DefinitionIdentity. Es darf nur genau eine Workflowdefinition eine nullDefinitionIdentity aufweisen.One and only one workflow definition may have a nullDefinitionIdentity.

Einige Änderungen sind zulässig.Some changes are permitted. Die folgenden Elemente sind möglicherweise zwischen den Versionen unterschiedlich:The following items may be different between the versions:

Konfigurieren der DefinitionIdentityConfiguring the DefinitionIdentity

Wenn ein Workflow-Service mit dem DefinitionIdentity Workflow-Designer erstellt wird, wird der mithilfe des Eigenschaftenfensters festgelegt.When a workflow service is created using the workflow designer, the DefinitionIdentity is set using the Properties window. Klicken Sie außerhalb der Stammaktivität des Diensts im Designer, um den Workflowdienst auszuwählen, und wählen Sie eigenschaftenfenster im Menü Ansicht aus.Click outside of the service’s root activity in the designer to select the workflow service, and choose Properties Window from the View menu. Wählen Sie WorkflowIdentity aus der Dropdownliste aus, die neben der WorkflowIdentity DefinitionIdentity-Eigenschaft angezeigt wird, und erweitern und geben Sie dann die gewünschten Eigenschaften an.Select WorkflowIdentity from the drop-down list that appears beside the DefinitionIdentity property, and then expand and specify the desired WorkflowIdentity properties. Im folgenden Beispiel DefinitionIdentity wird die Name MortgageWorkflow mit Version der 1.0.0.0und mit konfiguriert.In the following example the DefinitionIdentity is configured with the Name MortgageWorkflow and a Version of 1.0.0.0. Package ist optional und ist in diesem Beispiel null.Package is optional and in this example is null.

Screenshot, der die DefinitionIdentity-Eigenschaft anzeigt.

Für einen selbst gehosteten Workflowdienst wird DefinitionIdentity beim Erstellen des Workflowdiensts konfiguriert.When a workflow service is self-hosted, the DefinitionIdentity is configured when the workflow service is constructed. Im folgenden Beispiel DefinitionIdentity wird der mit den gleichen Werten wie Name MortgageWorkflow im Name vorherigen 1.0.0.0Beispiel konfiguriert, mit der und einer von .In the following example, the DefinitionIdentity is configured with the same values as the previous example, with the Name MortgageWorkflow and a Name of 1.0.0.0.

WorkflowService service = new WorkflowService  
{  
    Name = "MortgageWorkflowService",  
    Body = new MortgageWorkflow(),  
    DefinitionIdentity = new WorkflowIdentity  
    {  
        Name = "MortgageWorkflow",  
        Version = new Version(1, 0, 0, 0)  
    }  
};  
Dim service As New WorkflowService  
With service  
    .Name = "MortgageWorkflowService"  
    .Body = New MortgageWorkflow  
    .DefinitionIdentity = New WorkflowIdentity With _  
    { _  
        .Name = "MortgageWorkflow", _  
        .Version = New Version(1, 0, 0, 0) _  
    }  
End With  

A DefinitionIdentity ist nicht erforderlich, obwohl nur eine Version des Workflowdienstes möglicherweise einen NULL-WertDefinitionIdentityhat.A DefinitionIdentity is not required, although only one version of the workflow service may have a nullDefinitionIdentity.

Hinweis

Dies ist hilfreich, wenn der Dienst ursprünglich ohne DefinitionIdentity bereitgestellt wurde und dann eine aktualisierte Version erstellt wird.This is useful if the service was deployed initially without a DefinitionIdentity configured, and then an updated version is created.

Hinzufügen einer neuen Version zu einem im Web gehosteten WorkflowdienstAdding a New Version to a Web-hosted Workflow Service

Der erste Schritt beim Konfigurieren einer neuen Version eines Workflowdiensts in einem im Web gehosteten Dienst besteht darin, einen neuen Ordner im App_Code-Ordner zu erstellen, der den gleichen Namen hat wie die Dienstdatei.The first step in configuring a new version of a workflow service in a web-hosted service is to create a new folder in the App_Code folder that has the same name as the service file. Wenn die xamlx-Datei des Diensts den Namen MortgageWorkflow.xamlx aufweist, muss der Ordner den Namen MortgageWorkflow erhalten.If the service’s xamlx file is named MortgageWorkflow.xamlx, then the folder must be named MortgageWorkflow. Legen Sie eine Kopie der xamlx-Datei des ursprünglichen Diensts in diesem Ordner ab, und benennen Sie sie um, z. B. in MortgageWorkflowV1.xamlx.Place a copy of the original service’s xamlx file into this folder and rename it to a new name, such as MortgageWorkflowV1.xamlx. Nehmen Sie die gewünschten Änderungen am primären Dienst vor, aktualisieren Sie seine DefinitionIdentity, und stellen Sie dann den Dienst bereit.Make the desired changes to the primary service, update its DefinitionIdentity, and then deploy the service. Im folgenden Beispiel wurde die DefinitionIdentity mit dem NameMortgageWorkflow und der Version2.0.0.0 aktualisiert.In the following example the DefinitionIdentity has been updated with a Name of MortgageWorkflow and a Version of 2.0.0.0.

Screenshot, der DefinitionIdentity of WorkflowIdentity zeigt.

Wenn der Dienst neu gestartet wird, wird die frühere Version automatisch der SupportedVersions-Auflistung hinzugefügt, da sie sich im angegebenen Unterordner App_Code befindet.When the service restarts, the previous version will automatically be added to the SupportedVersions collection because it is located in the designated App_Code subfolder. Beachten Sie, dass, wenn die null DefinitionIdentity primäre Version des Workflowdienstes über eine verfügt, die vorherigen Versionen nicht hinzugefügt werden.Note that if the primary version of the workflow service has a null DefinitionIdentity the previous versions will not be added. Eine Version darf eine null-DefinitionIdentity aufweisen, wenn jedoch mehrere Versionen vorhanden sind, darf die primäre Version nicht die Version mit der null-DefinitionIdentity sein; andernfalls werden die früheren Versionen nicht der SupportedVersions-Auflistung hinzugefügt.One version may have a nullDefinitionIdentity, but if there are multiple versions the primary version must not be the one with the nullDefinitionIdentity or else the previous versions will not be added to the SupportedVersions collection.

Hinzufügen einer neuen Version zu einem selbst gehosteten WorkflowdienstAdding a New Version to a Self-hosted Workflow Service

Beim Hinzufügen einer neuen Version zu einem selbst gehosteten Workflowdienst wird der WorkflowServiceHost mit der primären Version des Workflowdiensts konfiguriert, und frühere Versionen müssen der SupportedVersions-Auflistung explizit hinzugefügt werden.When adding a new version to a self-hosted workflow service, the WorkflowServiceHost is configured with the primary version of the workflow service, and previous versions must be explicitly added to the SupportedVersions collection. Im folgenden Beispiel wird ein WorkflowServiceHost mit einem primären Workflowdienst konfiguriert, der die MortgageWorkflowV2-Workflowdefinition verwendet, und ein mit der MortgageWorkflowV1-Workflowdefinition konfigurierter Workflowdienst wird der SupportedVersions-Auflistung hinzugefügt.In the following example, a WorkflowServiceHost is configured with a primary workflow service that uses a MortgageWorkflowV2 workflow definition, and a workflow service configured with a MortgageWorkflowV1 workflow definition is added to the SupportedVersions collection. Jeder Workflowdienst wird mit einer eindeutigen DefinitionIdentity konfiguriert, die die Version der Workflowdefinition angibt.Each workflow service is configured with a unique DefinitionIdentity that reflects the version of the workflow definition.

// Create the primary version of the workflow service.  
WorkflowService serviceV2 = new WorkflowService  
{  
    Name = "MortgageWorkflowService",  
    Body = new MortgageWorkflowV2(),  
    DefinitionIdentity = new WorkflowIdentity  
    {  
        Name = "MortgageWorkflow",  
        Version = new Version(2, 0, 0, 0)  
    }  
};  
  
// Configure the WorkflowServiceHost with the current version  
// of the workflow service. This code requires Administrator  
// privileges to function correctly. If running from Visual  
// Studio, Visual Studio must be run with Administrator privileges.  
WorkflowServiceHost host = new WorkflowServiceHost(serviceV2,
    new Uri("http://localhost:8080/MortgageWorkflowService"));  
  
// Create the previous version of the workflow service.  
WorkflowService serviceV1 = new WorkflowService  
{  
    Name = "MortgageWorkflowService",  
    Body = new MortgageWorkflowV1(),  
    DefinitionIdentity = new WorkflowIdentity  
    {  
        Name = "MortgageWorkflow",  
        Version = new Version(1, 0, 0, 0)  
    }  
};  
  
// Add the previous version of the service to the SupportedVersions collection.  
host.SupportedVersions.Add(serviceV1);  
'Create the primary version of the workflow service  
Dim serviceV2 As New WorkflowService  
With serviceV2  
    .Name = "MortgageWorkflowService"  
    .Body = New MortgageWorkflowV2  
    .DefinitionIdentity = New WorkflowIdentity With _  
    { _  
        .Name = "MortgageWorkflow", _  
        .Version = New Version(2, 0, 0, 0) _  
    }  
End With  
  
'Configure the WorkflowServiceHost with the current version  
'of the workflow service. This code requires Administrator  
'privileges to function correctly. If running from Visual  
'Studio, Visual Studio must be run with Administrator privileges.  
  
Dim host As New WorkflowServiceHost(serviceV2, _  
    New Uri("http://localhost:8080/MortgageWorkflowService"))  
  
'Create the previous version of the workflow service.  
Dim serviceV1 As New WorkflowService  
With serviceV1  
    .Name = "MortgageWorkflowService"  
    .Body = New MortgageWorkflowV1  
    .DefinitionIdentity = New WorkflowIdentity With _  
    { _  
        .Name = "MortgageWorkflow", _  
        .Version = New Version(1, 0, 0, 0) _  
    }  
End With  
  
'Add the previous version of the service to the SupportedVersions collection.  
host.SupportedVersions.Add(serviceV1)