Control de versiones en paralelo en WorkflowServiceHostSide by Side Versioning in WorkflowServiceHost

El WorkflowServiceHost control de versiones en paralelo introducido en .NET Framework 4,5 proporciona la capacidad de hospedar varias versiones de un servicio de flujo de trabajo en un único punto de conexión.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. La funcionalidad en paralelo proporcionada permite configurar un servicio de flujo de trabajo para crear nuevas instancias del servicio de flujo de trabajo usando la nueva definición de flujo de trabajo, mientras que las instancias en ejecución se completan usando la definición existente.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. Este tema proporciona información general sobre la ejecución en paralelo del servicio de flujo de trabajo mediante WorkflowServiceHost.This topic provides an overview of workflow service side-by-side execution using WorkflowServiceHost.

Nota

Para descargar un ejemplo y ver un tutorial en vídeo sobre el control de versiones en paralelo del servicio de flujo de trabajo, consulte control de versiones en paralelo con un servicio de flujo de trabajo de Xamlx hospedado en Web.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.

Hospedar varias versiones en un servicio de flujo de trabajoHosting Multiple Versions in a Workflow Service

WorkflowServiceHost contiene dos propiedades que se pueden configurar para permitir la ejecución en paralelo de varias versiones de un flujo de trabajo: SupportedVersions y 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 contiene las versiones admitidas del servicio de flujo de trabajo y DefinitionIdentity se usa para identificar de forma única cada servicio de flujo de trabajo.SupportedVersions contains the supported versions of the workflow service, and DefinitionIdentity is used to uniquely identify each workflow service. Esto se hace asociando WorkflowIdentity al servicio de flujo de trabajo.This is done by associating a WorkflowIdentity with the workflow service. WorkflowIdentity contiene tres elementos de información de identificación.A WorkflowIdentity contains three identifying pieces of information. Name y Version contienen un nombre y Version y son necesarios, y Package es opcional y se puede usar para especificar una cadena adicional que contiene información como el nombre del ensamblado u otra información deseada.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. Cada servicio de flujo de trabajo contenido en la colección SupportedVersions debe tener una WorkflowIdentity única.Each workflow service contained in the SupportedVersions collection must have a unique WorkflowIdentity. WorkflowIdentity es único si cualquiera de sus tres propiedades son diferentes de otra WorkflowIdentity.A WorkflowIdentity is unique if any of its three properties are different from another WorkflowIdentity. Un null DefinitionIdentity nullesun valor permitido para, pero solo una versión anterior de un servicio de flujo de trabajo puede tener una WorkflowIdentity. WorkflowIdentityA null WorkflowIdentity is an allowable value for DefinitionIdentity, but only one previous version of a workflow service may have a null WorkflowIdentity.

Importante

Un objeto WorkflowIdentity no debe contener información de identificación personal (PII).A WorkflowIdentity should not contain any personally identifiable information (PII). WorkflowIdentity se compone de tres partes: Name (String), Version (Version) y Package (String).WorkflowIdentity is composed of three parts: a Name (String), a Version (Version), and a Package (String). El runtime emite la información acerca del elemento WorkflowIdentity usado para crear una instancia a cualquier servicio de seguimiento configurado en diferentes puntos del ciclo de vida de actividad.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. El seguimiento de WF no tiene ningún mecanismo para ocultar la PII (datos de usuario confidenciales).WF Tracking does not have any mechanism to hide PII (sensitive user data). Por lo tanto, una instancia de WorkflowIdentity no debe contener datos PII ya que el runtime los emitirá en registros de seguimiento y serán visibles para cualquiera que tenga acceso para ver los registros de seguimiento.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.

Reglas para hospedar varias versiones de un servicio de flujo de trabajoRules for Hosting Multiple Versions of a Workflow Service

Cuando un usuario agrega una versión adicional a WorkflowServiceHost, se deben cumplir varias condiciones para que un servicio de flujo de trabajo se hospede con el mismo conjunto de puntos de conexión y descripción.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. Si cualquiera de las versiones adicionales no cumple estas condiciones, WorkflowServiceHost produce una excepción cuando se llama a Open.If any of the additional versions fail to meet these conditions, the WorkflowServiceHost throws an exception when Open is called. Cada definición de flujo de trabajo proporcionada al host como versión adicional debe cumplir los requisitos siguientes (donde la versión principal es la definición de servicio de flujo de trabajo que se proporciona al constructor de 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 versión adicional del flujo de trabajo debe:The additional workflow version must:

  • Tenga el mismo Name que la versión principal del servicio de flujo de trabajo.Have the same the Name as the primary version of the workflow service.

  • No debe tener ninguna actividad Receive o SendReply en su Body que no esté en la versión principal y deben coincidir con el contrato de operación.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.

  • Tenga una DefinitionIdentity única.Have a unique DefinitionIdentity. Una única definición de flujo de trabajo puede tener una nullDefinitionIdentity.One and only one workflow definition may have a nullDefinitionIdentity.

Se permiten algunos cambios.Some changes are permitted. Los elementos siguientes pueden ser diferentes en las versiones:The following items may be different between the versions:

Configurar DefinitionIdentityConfiguring the DefinitionIdentity

Cuando se crea un servicio de flujo de trabajo mediante el diseñador DefinitionIdentity de flujo de trabajo, se establece mediante la ventana propiedades .When a workflow service is created using the workflow designer, the DefinitionIdentity is set using the Properties window. Haga clic fuera de la actividad raíz del servicio en el diseñador para seleccionar el servicio de flujo de trabajo y elija ventana Propiedades en el menú Ver .Click outside of the service’s root activity in the designer to select the workflow service, and choose Properties Window from the View menu. Seleccione WorkflowIdentity en la lista desplegable que aparece junto a la propiedad DefinitionIdentity y, a continuación, expanda y WorkflowIdentity especifique las propiedades deseadas.Select WorkflowIdentity from the drop-down list that appears beside the DefinitionIdentity property, and then expand and specify the desired WorkflowIdentity properties. En DefinitionIdentity el ejemplo siguiente MortgageWorkflow , se configura Name con y un Version de 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 es opcional y en este ejemplo es null.Package is optional and in this example is null.

Captura de pantalla que muestra la propiedad DefinitionIdentity.

Cuando un servicio de flujo de trabajo se hospeda a sí mismo, se configura DefinitionIdentity cuando se construye el servicio de flujo de trabajo.When a workflow service is self-hosted, the DefinitionIdentity is configured when the workflow service is constructed. En el ejemplo DefinitionIdentity siguiente, se configura con los mismos valores que en el ejemplo anterior, Name MortgageWorkflow con y un Name de 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  

No es necesario, aunque solo una versión del servicio de flujo de trabajo puede tener un valor nullDefinitionIdentity. DefinitionIdentityA DefinitionIdentity is not required, although only one version of the workflow service may have a nullDefinitionIdentity.

Nota

Esto es útil si el servicio se implementó inicialmente sin una DefinitionIdentity configurada y, a continuación, se creó una versión actualizada.This is useful if the service was deployed initially without a DefinitionIdentity configured, and then an updated version is created.

Agregar una nueva versión a un servicio de flujo de trabajo hospedado en webAdding a New Version to a Web-hosted Workflow Service

El primer paso para configurar una nueva versión de un servicio de flujo de trabajo en un servicio hospedado en web es crear una nueva carpeta en la carpeta App_Code que tiene el mismo nombre que el archivo de servicio.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. Si el archivo xamlx del servicio se denomina MortgageWorkflow.xamlx, la carpeta se debe llamar MortgageWorkflow.If the service’s xamlx file is named MortgageWorkflow.xamlx, then the folder must be named MortgageWorkflow. Coloque una copia del archivo xamlx del servicio original en esta carpeta y asígnele un nuevo nombre, como 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. Realice los cambios deseados al servicio primario, actualice su DefinitionIdentity y después implemente el servicio.Make the desired changes to the primary service, update its DefinitionIdentity, and then deploy the service. En el ejemplo siguiente se ha actualizado DefinitionIdentity con un Name de MortgageWorkflow y una Version de 2.0.0.0.In the following example the DefinitionIdentity has been updated with a Name of MortgageWorkflow and a Version of 2.0.0.0.

Captura de pantalla que muestra DefinitionIdentity de WorkflowIdentity.

Cuando se reinicie el servicio, la versión anterior se agregará automáticamente a la colección SupportedVersions porque se encuentra en la subcarpeta App_Code designada.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. Tenga en cuenta que si la versión principal del servicio de flujo null de trabajo tiene DefinitionIdentity las versiones anteriores, no se agregarán.Note that if the primary version of the workflow service has a null DefinitionIdentity the previous versions will not be added. Una versión puede tener una nullDefinitionIdentity, pero si hay varias versiones la versión principal no debe ser la que tenga una nullDefinitionIdentity o bien las versiones anteriores no se agregarán a la colección 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.

Agregar una nueva versión a un servicio de flujo de trabajo autohospedadoAdding a New Version to a Self-hosted Workflow Service

Al agregar una nueva versión a un servicio de flujo de trabajo autohospedado, WorkflowServiceHost se configura con la versión principal del servicio de flujo de trabajo y las versiones anteriores deben agregarse explícitamente a la colección 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. En el ejemplo siguiente, WorkflowServiceHost se configura con un servicio primario de flujo de trabajo que usa una definición de flujo de trabajo de MortgageWorkflowV2 y se agrega un servicio de flujo de trabajo configurado con una definición de flujo de trabajo de MortgageWorkflowV1 a la colección 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. Cada servicio de flujo de trabajo se configura con una DefinitionIdentity única que refleja la versión de la definición de flujo de trabajo.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)