Równoległe przechowywanie wersji w klasie WorkflowServiceHost

Wersje WorkflowServiceHost równoległe wprowadzone w programie .NET Framework 4.5 zapewniają możliwość hostowania wielu wersji usługi przepływu pracy w jednym punkcie końcowym. Udostępnione funkcje side-by-side umożliwiają skonfigurowanie usługi przepływu pracy tak, aby nowe wystąpienia usługi przepływu pracy zostały utworzone przy użyciu nowej definicji przepływu pracy, podczas gdy uruchomione wystąpienia zostały ukończone przy użyciu istniejącej definicji. Ten temat zawiera omówienie wykonywania równoległego usługi przepływu pracy przy użyciu polecenia WorkflowServiceHost.

Hostowanie wielu wersji w usłudze przepływu pracy

WorkflowServiceHost Zawiera dwie właściwości, które można skonfigurować tak, aby umożliwić wykonywanie wielu wersji przepływu pracy obok siebie: SupportedVersions i DefinitionIdentity. SupportedVersions zawiera obsługiwane wersje usługi przepływu pracy i DefinitionIdentity służy do unikatowego identyfikowania poszczególnych usług przepływu pracy. Odbywa się to przez skojarzenie WorkflowIdentity obiektu z usługą przepływu pracy. Element zawiera WorkflowIdentity trzy informacje identyfikujące. Name i Version zawierają nazwę i Version i są wymagane, i Package jest opcjonalny i może służyć do określenia dodatkowego ciągu zawierającego informacje, takie jak nazwa zestawu lub inne żądane informacje. Każda usługa przepływu pracy zawarta w SupportedVersions kolekcji musi mieć unikatowy element WorkflowIdentity. A WorkflowIdentity jest unikatowa, jeśli którakolwiek z jego trzech właściwości różni się od innej WorkflowIdentity. A nulljest dozwoloną wartością dla DefinitionIdentityelementu , ale tylko jedna poprzednia wersja usługi przepływu pracy może mieć wartość nullWorkflowIdentity.WorkflowIdentity

Ważne

Element nie WorkflowIdentity powinien zawierać żadnych danych osobowych (PII). WorkflowIdentity składa się z trzech części: a Name (String), a Version (Version) i Package (String). Informacje o używanym WorkflowIdentity do tworzenia wystąpienia są emitowane do dowolnych skonfigurowanych usług śledzenia w kilku różnych punktach cyklu życia aktywności przez środowisko uruchomieniowe. Śledzenie WF nie ma żadnego mechanizmu ukrywania danych pii (poufnych danych użytkownika). WorkflowIdentity W związku z tym wystąpienie nie powinno zawierać żadnych danych pii, ponieważ będzie ono emitowane przez środowisko uruchomieniowe w rekordach śledzenia i może być widoczne dla każdego, kto ma dostęp do wyświetlania rekordów śledzenia.

Reguły hostowania wielu wersji usługi przepływu pracy

Gdy użytkownik dodaje dodatkową wersję do WorkflowServiceHostprogramu , istnieje kilka warunków, które muszą zostać spełnione, aby usługa przepływu pracy była hostowana przy użyciu tego samego zestawu punktów końcowych i opisu. Jeśli którakolwiek z dodatkowych wersji nie spełnia tych warunków, WorkflowServiceHost zgłasza wyjątek, gdy Open jest wywoływany. Każda definicja przepływu pracy dostarczona do hosta jako dodatkowa wersja musi spełniać następujące wymagania (gdzie wersja podstawowa to definicja usługi przepływu pracy podana dla konstruktora hosta). Dodatkowa wersja przepływu pracy musi:

  • Mają taką samą Name , jak podstawowa wersja usługi przepływu pracy.

  • Nie może zawierać żadnych Receive działań Body ani SendReply działań, które nie znajdują się w wersji podstawowej i muszą być zgodne z kontraktem operacji.

  • Mają unikatowy element DefinitionIdentity. Jedna i tylko jedna definicja przepływu pracy może mieć nullDefinitionIdentity.

Niektóre zmiany są dozwolone. Następujące elementy mogą się różnić między wersjami:

Konfigurowanie definicjiIdentity

Gdy usługa przepływu pracy zostanie utworzona przy użyciu projektanta przepływu pracy, DefinitionIdentity zostanie ustawiona przy użyciu okna Właściwości . Kliknij poza działaniem głównym usługi w projektancie, aby wybrać usługę przepływu pracy, a następnie wybierz pozycję Okno właściwości z menu Widok. Wybierz pozycję WorkflowIdentity z listy rozwijanej, która znajduje się obok właściwości DefinitionIdentity , a następnie rozwiń i określ żądane WorkflowIdentity właściwości. W poniższym przykładzie element DefinitionIdentity jest skonfigurowany za pomocą wartości NameMortgageWorkflow i .1.0.0.0Version Package jest opcjonalny, a w tym przykładzie jest to null.

Screenshot that shows the DefinitionIdentity property.

Gdy usługa przepływu pracy jest hostowana samodzielnie, DefinitionIdentity jest konfigurowana podczas konstruowania usługi przepływu pracy. W poniższym przykładzie parametr DefinitionIdentity jest skonfigurowany z tymi samymi wartościami co w poprzednim przykładzie z wartościami NameMortgageWorkflow i .Name1.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  

Wartość A DefinitionIdentity nie jest wymagana, chociaż tylko jedna wersja usługi przepływu pracy może mieć wartość nullDefinitionIdentity.

Uwaga

Jest to przydatne, jeśli usługa została wdrożona początkowo bez skonfigurowanej DefinitionIdentity , a następnie jest tworzona zaktualizowana wersja.

Dodawanie nowej wersji do usługi przepływu pracy hostowanej w Sieci Web

Pierwszym krokiem konfigurowania nowej wersji usługi przepływu pracy w usłudze hostowanej w sieci Web jest utworzenie nowego folderu w App_Code folderze o takiej samej nazwie jak plik usługi. Jeśli plik usługi xamlx ma nazwę MortgageWorkflow.xamlx, folder musi mieć nazwę MortgageWorkflow. Umieść kopię pliku oryginalnej usługi xamlx w tym folderze i zmień jego nazwę na nową nazwę, taką jak MortgageWorkflowV1.xamlx. Wprowadź żądane zmiany w usłudze podstawowej, zaktualizuj jej DefinitionIdentityelement , a następnie wdróż usługę. W poniższym przykładzie DefinitionIdentity element został zaktualizowany za pomocą wartości i .Version2.0.0.0NameMortgageWorkflow

Screenshot that shows DefinitionIdentity of WorkflowIdentity.

Po ponownym uruchomieniu usługi poprzednia wersja zostanie automatycznie dodana do SupportedVersions kolekcji, ponieważ znajduje się w wyznaczonym App_Code podfolderze. Należy pamiętać, że jeśli podstawowa wersja usługi przepływu pracy ma nullDefinitionIdentity poprzednie wersje, nie zostaną dodane. Jedna wersja może mieć nullDefinitionIdentitywartość , ale jeśli istnieje wiele wersji, wersja podstawowa nie może być wersją jedną z nullDefinitionIdentity poprzednich wersji lub nie zostaną dodane do SupportedVersions kolekcji.

Dodawanie nowej wersji do samoobsługowej usługi przepływu pracy

Podczas dodawania nowej wersji do samoobsługowej usługi WorkflowServiceHost przepływu pracy jest ona skonfigurowana przy użyciu podstawowej wersji usługi przepływu pracy, a poprzednie wersje muszą zostać jawnie dodane do SupportedVersions kolekcji. W poniższym przykładzie element jest skonfigurowany z podstawową usługą przepływu pracy, WorkflowServiceHost która używa MortgageWorkflowV2 definicji przepływu pracy, a usługa przepływu pracy skonfigurowana z definicją MortgageWorkflowV1 przepływu pracy jest dodawana do SupportedVersions kolekcji. Każda usługa przepływu pracy jest skonfigurowana przy użyciu unikatowego elementu DefinitionIdentity , który odzwierciedla wersję definicji przepływu pracy.

// 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)