Parallele Versionsverwaltung in WorkflowServiceHostSide by Side Versioning in WorkflowServiceHost

Die parallele WorkflowServiceHost-Versionsverwaltung, die in .NET Framework 4.5.NET Framework 4.5 eingeführt wurde, ermöglicht das Hosten mehrerer Versionen eines Workflowdiensts auf einem einzelnen Endpunkt.The WorkflowServiceHost side-by-side versioning introduced in .NET Framework 4.5.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

Um ein Beispiel herunterzuladen, und ein video zur exemplarischen Vorgehensweise für die Workflow-Seite-an-Seite dienstversionsverwaltung, finden Sie unter parallele Versionsverwaltung mit einem paralleldarstellung Xamlx-Workflowdienst.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. Ein null WorkflowIdentity ist ein zulässiger Wert für DefinitionIdentity, jedoch möglicherweise nur eine frühere Version eines Workflowdiensts eine null WorkflowIdentity.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. Nur eine Workflowdefinition möglicherweise eine null DefinitionIdentity.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

Bei der Erstellung eines Workflowdiensts mithilfe von Workflow-Designer die DefinitionIdentity festgelegt ist, mit der Eigenschaften Fenster.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 im Designer, um den Workflowdienst auszuwählen, und wählen den Dienst auf Fenster "Eigenschaften" aus der Ansicht Menü.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 Dropdown-Liste, die neben der DefinitionIdentity -Eigenschaft, und klicken Sie dann zu erweitern, und geben Sie die gewünschten WorkflowIdentity Eigenschaften.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 die DefinitionIdentity konfiguriert ist, mit der Name MortgageWorkflow und ein Version von 1.0.0.0.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.

DefinitionIdentityDefinitionIdentity

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 die DefinitionIdentity mit die gleichen Werte wie im vorherigen Beispiel konfiguriert, wobei die Name MortgageWorkflow und ein Name von 1.0.0.0.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  

Ein DefinitionIdentity ist nicht erforderlich, obwohl möglicherweise nur eine Version des Workflowdiensts eine nullDefinitionIdentity.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 Name MortageWorkflow und der Version 2.0.0.0 aktualisiert.In the following example the DefinitionIdentity has been updated with a Name of MortageWorkflow and a Version of 2.0.0.0.

DefinitionIdentityDefinitionIdentity

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 primäre des Workflowdiensts Version eine null DefinitionIdentity die früheren Versionen werden 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)