Gestione di più versioni in WorkflowServiceHostSide by Side Versioning in WorkflowServiceHost

Il controllo delle versioni side-by-side di WorkflowServiceHost introdotto in .NET Framework 4.5.NET Framework 4.5 fornisce la possibilità di ospitare più versioni di un servizio di flusso di lavoro in un unico endpoint.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. La funzionalità side-by-side consente di configurare un servizio di flusso di lavoro in modo che le sue nuove istanze vengano create con la nuova definizione del flusso di lavoro, mentre le istanze in esecuzione vengono completate con la definizione esistente.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. In questo argomento viene fornita una panoramica dell'esecuzione side-by-side del servizio di flusso di lavoro usando WorkflowServiceHost.This topic provides an overview of workflow service side-by-side execution using WorkflowServiceHost.

Nota

Per scaricare un esempio e guardare un video sulla procedura dettagliata del controllo delle versioni side-by-side di servizio del flusso di lavoro, vedere controllo delle versioni Side-by-Side con un servizio di flusso di lavoro Xamlx gestione.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.

Hosting di più versioni in un servizio di flusso di lavoroHosting Multiple Versions in a Workflow Service

WorkflowServiceHost contiene due proprietà che possono essere configurate per consentire l'esecuzione side-by-side di più versioni di un flusso di lavoro: SupportedVersions e DefinitionIdentity.WorkflowServiceHost contains two properties that can be configured to allow multiple versions of a workflow to execute side-by-side: SupportedVersions and DefinitionIdentity. La proprietà SupportedVersions contiene le versioni supportate del servizio di flusso di lavoro e la proprietà DefinitionIdentity viene usata per identificare in modo univoco ogni servizio di flusso di lavoro.SupportedVersions contains the supported versions of the workflow service, and DefinitionIdentity is used to uniquely identify each workflow service. Questa operazione viene effettuata associando un oggetto WorkflowIdentity al servizio di flusso di lavoro.This is done by associating a WorkflowIdentity with the workflow service. WorkflowIdentity contiene tre informazioni di identificazione.A WorkflowIdentity contains three identifying pieces of information. Le proprietà Name e Version contengono un nome e un oggetto Version e sono obbligatorie, mentre la proprietà Package è facoltativa e può essere usata per specificare una stringa aggiuntiva che contiene informazioni quali il nome dell'assembly o altre informazioni desiderate.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. A ogni servizio di flusso di lavoro contenuto nella raccolta SupportedVersions deve essere associato un oggetto WorkflowIdentity univoco.Each workflow service contained in the SupportedVersions collection must have a unique WorkflowIdentity. Un oggetto WorkflowIdentity è univoco se una qualsiasi delle tre relative proprietà è diversa da un altro oggetto WorkflowIdentity.A WorkflowIdentity is unique if any of its three properties are different from another WorkflowIdentity. Oggetto null WorkflowIdentity è un valore consentito per DefinitionIdentity, ma solo una versione precedente di un servizio flusso di lavoro può avere un 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.

Importante

WorkflowIdentity non deve contenere eventuali informazioni identificabili personalmente (PII).A WorkflowIdentity should not contain any personally identifiable information (PII). WorkflowIdentity si compone di tre parti: Name (String), Version (Version) e Package (String).WorkflowIdentity is composed of three parts: a Name (String), a Version (Version), and a Package (String). Le informazioni su WorkflowIdentity usate per creare un'istanza vengono generate a tutti i servizi di rilevamento configurati in vari punti del ciclo di vita di attività dal runtime.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. La verifica di WF non ha alcun meccanismo per nascondere i PII (dati riservati dell'utente).WF Tracking does not have any mechanism to hide PII (sensitive user data). Di conseguenza, un'istanza di WorkflowIdentity non deve contenere dati di PII poiché verrebbe generata dal runtime nei record di rilevamento e può essere visibile agli utenti con accesso alla visualizzazione dei record di rilevamento.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.

Regole per l'hosting di più versioni di un servizio di flusso di lavoroRules for Hosting Multiple Versions of a Workflow Service

Quando un utente aggiunge un'ulteriore versione a WorkflowServiceHost, è necessario soddisfare diverse condizioni affinché un servizio di flusso di lavoro possa essere ospitato con lo stesso set di endpoint e la medesima descrizione.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. Se una delle versioni aggiuntive non soddisfa queste condizioni, WorkflowServiceHost genera un'eccezione quando viene chiamato Open.If any of the additional versions fail to meet these conditions, the WorkflowServiceHost throws an exception when Open is called. Ogni definizione di flusso di lavoro fornita all'host come versione aggiuntiva deve soddisfare i requisiti seguenti (dove la versione principale è la definizione del servizio di flusso di lavoro fornita al costruttore host).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). La versione aggiuntiva del flusso di lavoro deve soddisfare i requisiti seguenti:The additional workflow version must:

  • Disporre della stessa proprietà Name della versione principale del servizio di flusso di lavoro.Have the same the Name as the primary version of the workflow service.

  • Non disporre di alcuna attività Receive o SendReply in Body che non sia presente anche nella versione principale e, nel caso, tali attività devono corrispondere al contratto dell'operazione.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.

  • Disporre di una proprietà DefinitionIdentity univoca.Have a unique DefinitionIdentity. Una sola definizione di flusso di lavoro può avere un null DefinitionIdentity.One and only one workflow definition may have a nullDefinitionIdentity.

Alcune modifiche sono consentite.Some changes are permitted. Gli elementi seguenti possono essere diversi tra una versione e l'altra:The following items may be different between the versions:

Configurazione di DefinitionIdentityConfiguring the DefinitionIdentity

Quando un servizio flusso di lavoro viene creato utilizzando la finestra di progettazione del flusso di lavoro, il DefinitionIdentity viene impostata utilizzando il proprietà finestra.When a workflow service is created using the workflow designer, the DefinitionIdentity is set using the Properties window. Fare clic all'esterno delle attività radice del servizio nella finestra di progettazione per selezionare il servizio del flusso di lavoro e scegliere finestra proprietà dal vista menu.Click outside of the service’s root activity in the designer to select the workflow service, and choose Properties Window from the View menu. Selezionare WorkflowIdentity nell'elenco di riepilogo a discesa visualizzato accanto il DefinitionIdentity proprietà, quindi espandere e specificare l'oggetto desiderato WorkflowIdentity proprietà.Select WorkflowIdentity from the drop-down list that appears beside the DefinitionIdentity property, and then expand and specify the desired WorkflowIdentity properties. Nell'esempio seguente il DefinitionIdentity è configurato con il Name MortgageWorkflow e Version di 1.0.0.0.In the following example the DefinitionIdentity is configured with the Name MortgageWorkflow and a Version of 1.0.0.0. La proprietà Package è facoltativa e in questo esempio è null.Package is optional and in this example is null.

DefinitionIdentityDefinitionIdentity

Quando un servizio di flusso di lavoro è self-hosted, la proprietà DefinitionIdentity viene configurata quando il servizio di flusso di lavoro viene costruito.When a workflow service is self-hosted, the DefinitionIdentity is configured when the workflow service is constructed. Nell'esempio seguente, il DefinitionIdentity viene configurato con gli stessi valori dell'esempio precedente, con la Name MortgageWorkflow e Name di 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  

Oggetto DefinitionIdentity non è obbligatorio, anche se solo una versione del servizio del flusso di lavoro può avere un nullDefinitionIdentity.A DefinitionIdentity is not required, although only one version of the workflow service may have a nullDefinitionIdentity.

Nota

Questa condizione è utile se il servizio è stato distribuito inizialmente senza una proprietà DefinitionIdentity configurata e, successivamente, viene creata una versione aggiornata.This is useful if the service was deployed initially without a DefinitionIdentity configured, and then an updated version is created.

Aggiunta di una nuova versione a un servizio di flusso di lavoro ospitato sul WebAdding a New Version to a Web-hosted Workflow Service

Il primo passaggio della configurazione di una nuova versione di un servizio di flusso di lavoro in un servizio ospitato sul Web consiste nel creare una nuova cartella nella cartella App_Code, denominandola come il file del servizio.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. Se il file xamlx del servizio è denominato MortgageWorkflow.xamlx, la cartella deve essere denominata MortgageWorkflow.If the service’s xamlx file is named MortgageWorkflow.xamlx, then the folder must be named MortgageWorkflow. Inserire una copia del file xamlx del servizio originale in questa cartella e assegnarle un nuovo nome, ad esempio 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. Apportare le modifiche desiderate al servizio principale, aggiornare la relativa proprietà DefinitionIdentity, quindi distribuire il servizio.Make the desired changes to the primary service, update its DefinitionIdentity, and then deploy the service. Nell'esempio seguente, la proprietà DefinitionIdentity è stata aggiornata con la proprietà Name MortageWorkflow e la proprietà Version 2.0.0.0.In the following example the DefinitionIdentity has been updated with a Name of MortageWorkflow and a Version of 2.0.0.0.

DefinitionIdentityDefinitionIdentity

Quando il servizio viene riavviato, la versione precedente verrà aggiunta automaticamente alla raccolta SupportedVersions poiché si trova nella sottocartella App_Code designata.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. Si noti che se la versione principale del servizio flusso di lavoro ha un null DefinitionIdentity le versioni precedenti non verranno aggiunti.Note that if the primary version of the workflow service has a null DefinitionIdentity the previous versions will not be added. Una versione può avere una proprietà nullDefinitionIdentity, tuttavia se sono presenti più versioni, la versione principale non deve essere quella con la proprietà nullDefinitionIdentity, altrimenti le versioni precedenti non verranno aggiunte alla raccolta SupportedVersions.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.

Aggiunta di una nuova versione a un servizio di flusso di lavoro self-hostedAdding a New Version to a Self-hosted Workflow Service

Quando si aggiunge una nuova versione a un servizio di flusso di lavoro self-hosted, l'oggetto WorkflowServiceHost viene configurato con la versione principale del servizio di flusso di lavoro e le versioni precedenti devono essere aggiunte in modo esplicito alla raccolta SupportedVersions.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. Nell'esempio seguente un oggetto WorkflowServiceHost viene configurato con un servizio di flusso di lavoro principale che usa una definizione del flusso di lavoro MortgageWorkflowV2 e un servizio di flusso di lavoro configurato con una definizione del flusso di lavoro MortgageWorkflowV1 viene aggiunto alla raccolta SupportedVersions.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. Ogni servizio di flusso di lavoro è configurato con una proprietà DefinitionIdentity univoca che riflette la versione della definizione del flusso di lavoro.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)