Práce s víc verzemi současně ve třídě WorkflowServiceHost
WorkflowServiceHost Souběžná správa verzí zavedená v rozhraní .NET Framework 4.5 poskytuje možnost hostovat více verzí služby pracovního postupu v jednom koncovém bodu. Poskytované souběžné funkce umožňují nakonfigurovat službu pracovního postupu tak, aby se nové instance služby pracovního postupu vytvořily pomocí nové definice pracovního postupu a spuštěné instance se dokončily pomocí existující definice. Toto téma obsahuje přehled souběžného spouštění služby pracovního postupu pomocí WorkflowServiceHost.
Hostování více verzí ve službě pracovního postupu
WorkflowServiceHost obsahuje dvě vlastnosti, které lze nakonfigurovat tak, aby umožňovaly provádění více verzí pracovního postupu vedle sebe: SupportedVersions a DefinitionIdentity. SupportedVersions obsahuje podporované verze služby pracovního postupu a DefinitionIdentity slouží k jedinečné identifikaci jednotlivých služeb pracovního postupu. To se provádí přidružením WorkflowIdentity ke službě pracovního postupu. A WorkflowIdentity obsahuje tři identifikační údaje. Name a Version obsahují název a Version a jsou povinné a Package je volitelné a lze jej použít k zadání dalšího řetězce obsahujícího informace, jako je název sestavení nebo jiné požadované informace. Každá služba pracovního postupu obsažená v kolekci SupportedVersions musí mít jedinečnou WorkflowIdentity. A WorkflowIdentity je jedinečný, pokud některé z jejích tří vlastností se liší od jiné WorkflowIdentity. A null
WorkflowIdentity je povolená hodnota pro DefinitionIdentity, ale pouze jedna předchozí verze služby pracovního postupu může mít null
WorkflowIdentityhodnotu .
Důležité
A WorkflowIdentity nesmí obsahovat žádné identifikovatelné osobní údaje (PII). WorkflowIdentity se skládá ze tří částí: a Name (String), a Version (Version) a Package (String). Informace o WorkflowIdentity použitém k vytvoření instance se vygenerují do všech nakonfigurovaných sledovacích služeb v několika různých bodech životního cyklu aktivity modulem runtime. Sledování WF nemá žádný mechanismus pro skrytí PII (citlivých uživatelských dat). Proto by instance neměla obsahovat žádná data PII, WorkflowIdentity protože bude vygenerována modulem runtime při sledování záznamů a může být viditelná pro každého, kdo má přístup k zobrazení záznamů sledování.
Pravidla pro hostování více verzí služby pracovního postupu
Když uživatel přidá další verzi WorkflowServiceHost, musí být splněno několik podmínek, aby služba pracovního postupu byla hostována se stejnou sadou koncových bodů a popisem. Pokud některé z dalších verzí nesplní tyto podmínky, WorkflowServiceHost vyvolá při zavolání výjimku Open
. Každá definice pracovního postupu poskytovaná hostiteli jako další verze musí splňovat následující požadavky (kde primární verze je definice služby pracovního postupu, která je poskytována konstruktoru hostitele). Další verze pracovního postupu musí:
Mají stejnou Name jako primární verzi služby pracovního postupu.
Nesmí obsahovat žádné Receive aktivity ani SendReply aktivity, Body které nejsou v primární verzi, a musí odpovídat kontraktu operace.
Mít jedinečný DefinitionIdentity. Jedna a pouze jedna definice pracovního postupu může mít
null
DefinitionIdentity.
Některé změny jsou povolené. Mezi verzemi se můžou lišit následující položky:
Může DefinitionIdentity mít jiný název a balíček než primární verze.
Hodnota AllowBufferedReceive se může lišit od primární verze.
Může ConfigurationName se lišit od primární verze.
Může ImplementedContracts se lišit od primární verze.
Konfigurace definiceIdentity
Při vytvoření služby pracovního postupu pomocí návrháře pracovního postupu je nastavena DefinitionIdentity pomocí okna Vlastnosti . Kliknutím mimo kořenovou aktivitu služby v návrháři vyberte službu pracovního postupu a v nabídce Zobrazit zvolte okno Vlastnosti. V rozevíracím seznamu, který se zobrazí vedle vlastnosti DefinitionIdentity, vyberte WorkflowIdentity a potom rozbalte a zadejte požadované WorkflowIdentity vlastnosti. V následujícím příkladu DefinitionIdentity je nakonfigurována s Name MortgageWorkflow
a Version z 1.0.0.0
. Package je nepovinný a v tomto příkladu je null
.
Pokud je služba pracovního postupu hostovaná samostatně, DefinitionIdentity nakonfiguruje se při vytváření služby pracovního postupu. V následujícím příkladu DefinitionIdentity je nakonfigurován se stejnými hodnotami jako v předchozím příkladu Name MortgageWorkflow
s a Name z 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
Není vyžadována hodnota A DefinitionIdentity , i když pouze jedna verze služby pracovního postupu může mít hodnotu nullDefinitionIdentity.
Poznámka:
To je užitečné, pokud byla služba zpočátku nasazena bez nakonfigurované DefinitionIdentity konfigurace a pak se vytvoří aktualizovaná verze.
Přidání nové verze do služby pracovního postupu hostovaného webem
Prvním krokem při konfiguraci nové verze služby pracovního postupu ve webové hostované službě je vytvoření nové složky ve App_Code
složce, která má stejný název jako soubor služby. Pokud je soubor služby xamlx
pojmenovaný MortgageWorkflow.xamlx
, musí být složka pojmenována MortgageWorkflow
. Do této složky umístěte kopii původního souboru služby xamlx
a přejmenujte ho na nový název, například MortgageWorkflowV1.xamlx
. Proveďte požadované změny v primární službě, aktualizujte její DefinitionIdentitya pak službu nasaďte. V následujícím příkladu DefinitionIdentity byla aktualizována o Name a MortgageWorkflow
Version z 2.0.0.0
.
Když se služba restartuje, předchozí verze se automaticky přidá do SupportedVersions kolekce, protože je umístěná v určené App_Code
podsložce. Upozorňujeme, že pokud má null
DefinitionIdentity primární verze služby pracovního postupu předchozí verze, nepřidá se. Jedna verze může obsahovat null
DefinitionIdentityverzi , ale pokud existuje více verzí, nesmí být primární verze s verzí nebo null
DefinitionIdentity jinak předchozí verze nebudou SupportedVersions přidány do kolekce.
Přidání nové verze do služby pracovního postupu v místním prostředí
Při přidávání nové verze do služby WorkflowServiceHost pracovního postupu v místním prostředí je nakonfigurovaná primární verze služby pracovního postupu a předchozí verze musí být explicitně přidány SupportedVersions do kolekce. V následujícím příkladu WorkflowServiceHost je nakonfigurována primární služba pracovního postupu, která používá MortgageWorkflowV2
definici pracovního postupu, a služba pracovního postupu nakonfigurovaná s MortgageWorkflowV1
definicí pracovního postupu se přidá do SupportedVersions kolekce. Každá služba pracovního postupu má nakonfigurovanou jedinečnou DefinitionIdentity verzi definice pracovního postupu.
// 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)