WorkflowIdentity Kullanma ve Sürüm Oluşturma

WorkflowIdentity , iş akışı uygulaması geliştiricilerinin bir adı ve Version bir iş akışı tanımıyla ilişkilendirmesi ve bu bilgilerin kalıcı bir iş akışı örneğiyle ilişkilendirilmesi için bir yol sağlar. Bu kimlik bilgileri, iş akışı uygulama geliştiricileri tarafından bir iş akışı tanımının birden çok sürümünün yan yana yürütülmesi gibi senaryoları etkinleştirmek için kullanılabilir ve dinamik güncelleştirme gibi diğer işlevler için köşe taşını sağlar. Bu konu, barındırma ile WorkflowApplication kullanmaya WorkflowIdentity genel bakış sağlar. bir iş akışı hizmetinde iş akışı tanımlarının yan yana yürütülmesi hakkında bilgi için bkz . WorkflowServiceHost'ta Yan Yana Sürüm Oluşturma. Dinamik güncelleştirme hakkında bilgi için bkz . Dinamik Güncelleştirme.

Bu konuda,

WorkflowIdentity kullanma

kullanmak WorkflowIdentityiçin bir örnek oluşturun, yapılandırın ve bir WorkflowApplication örnekle ilişkilendirin. Örnek WorkflowIdentity , üç tanımlayıcı bilgi parçası içerir. Name ve Version bir ad ve bir Version içerir ve gereklidir ve Package isteğe bağlıdır ve derleme adı veya diğer istenen bilgiler gibi bilgileri içeren ek bir dize belirtmek için kullanılabilir. Üç özelliğinden herhangi biri başka WorkflowIdentitybir özelliğinden farklıysa, A WorkflowIdentity benzersizdir.

Önemli

A WorkflowIdentity , kişisel bilgiler (PII) içermemelidir. Örnek oluşturmak için kullanılan ile ilgili WorkflowIdentity bilgiler, çalışma zamanı tarafından etkinlik yaşam döngüsünün birkaç farklı noktasında yapılandırılmış izleme hizmetlerine gönderilir. WF İzleme,PII'yi (hassas kullanıcı verileri) gizlemek için herhangi bir mekanizmaya sahip değildir. Bu nedenle, bir örnek izleme kayıtlarında çalışma zamanı tarafından yayılacağı ve izleme kayıtlarını görüntüleme erişimi olan herkes tarafından görülebileceği için herhangi bir WorkflowIdentity PII verisi içermemelidir.

Aşağıdaki örnekte, bir WorkflowIdentity oluşturulur ve iş akışı tanımı kullanılarak MortgageWorkflow oluşturulan bir iş akışı örneğiyle ilişkilendirilir.

WorkflowIdentity identityV1 = new WorkflowIdentity
{
    Name = "MortgageWorkflow v1",
    Version = new Version(1, 0, 0, 0)
};

WorkflowApplication wfApp = new WorkflowApplication(new MortgageWorkflow(), identity);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Run the workflow.
wfApp.Run();

Bir iş akışı yeniden yüklenirken ve devam ettirilirken, kalıcı iş akışı örneğininkiyle WorkflowIdentity eşleşecek şekilde yapılandırılmış bir WorkflowIdentity kullanılmalıdır.

WorkflowApplication wfApp = new WorkflowApplication(new MortgageWorkflow(), identityV1);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Load the workflow.
wfApp.Load(instanceId);

// Resume the workflow...

WorkflowIdentity İş akışı örneği yeniden yüklenirken kullanılan kalıcı ile eşleşmiyorsaWorkflowIdentity, bir VersionMismatchException oluşturulur. Aşağıdaki örnekte, önceki örnekte kalıcı olan örnekte bir yük denemesi yapılır MortgageWorkflow . Bu yük denemesi, kalıcı örnekle eşleşmeyen ipotek iş akışının daha yeni bir sürümü için yapılandırılmış bir kullanılarak WorkflowIdentity yapılır.

WorkflowApplication wfApp = new WorkflowApplication(new MortgageWorkflow_v2(), identityV2);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Attempt to load the workflow instance.
wfApp.Load(instanceId);

// Resume the workflow...

Önceki kod yürütürken aşağıdakiler VersionMismatchException oluşturulur.

The WorkflowIdentity ('MortgageWorkflow v1; Version=1.0.0.0') of the loaded instance does not match the WorkflowIdentity ('MortgageWorkflow v2; Version=2.0.0.0') of the provided workflow definition. The instance can be loaded using a different definition, or updated using Dynamic Update.

WorkflowIdentity Kullanarak Yan Yana Yürütme

WorkflowIdentity bir iş akışının birden çok sürümünün yan yana yürütülmesini kolaylaştırmak için kullanılabilir. Yaygın senaryolardan biri, uzun süre çalışan bir iş akışında iş gereksinimlerini değiştirmektir. Güncelleştirilmiş bir sürüm dağıtıldığında iş akışının birçok örneği çalışıyor olabilir. Konak uygulaması, yeni örnekler başlatılırken güncelleştirilmiş iş akışı tanımını kullanacak şekilde yapılandırılabilir ve örnekleri devam ettirirken doğru iş akışı tanımını sağlamak konak uygulamanın sorumluluğundadır. WorkflowIdentity iş akışı örneklerini devam ettirirken eşleşen iş akışı tanımını tanımlamak ve sağlamak için kullanılabilir.

Kalıcı bir iş akışı örneğinin GetInstance almak WorkflowIdentity için yöntemi kullanılır. yöntemi kalıcı GetInstance iş akışı örneğinin ve SqlWorkflowInstanceStore kalıcı örneği içeren öğesini alır Id ve döndürürWorkflowApplicationInstance. , WorkflowApplicationInstance ilişkili WorkflowIdentitydahil olmak üzere kalıcı bir iş akışı örneği hakkında bilgi içerir. Bu ilişkili WorkflowIdentity , iş akışı örneği yüklenirken ve devam ettirildiğinde doğru iş akışı tanımını sağlamak için konak tarafından kullanılabilir.

Not

Null WorkflowIdentity geçerlidir ve konak tarafından uygun iş akışı tanımıyla ilişkili WorkflowIdentity olmayan kalıcı örnekleri eşlemek için kullanılabilir. Bu senaryo, bir iş akışı uygulaması başlangıçta iş akışı sürümü oluşturma ile yazılmadığında veya bir uygulama .NET Framework 4'ten yükseltildiğinde ortaya çıkabilir. Daha fazla bilgi için bkz . .NET Framework 4 Kalıcılık Veritabanlarını İş Akışı Sürümü Oluşturma Desteğine Yükseltme.

Aşağıdaki örnekte, Dictionary<WorkflowIdentity, Activity> örnekleri eşleşen iş akışı tanımlarıyla ilişkilendirmek WorkflowIdentity için bir kullanılır ve ile identityV1WorkflowIdentityilişkili iş akışı tanımı kullanılarak MortgageWorkflow bir iş akışı başlatılır.

WorkflowIdentity identityV1 = new WorkflowIdentity
{
    Name = "MortgageWorkflow v1",
    Version = new Version(1, 0, 0, 0)
};

WorkflowIdentity identityV2 = new WorkflowIdentity
{
    Name = "MortgageWorkflow v2",
    Version = new Version(2, 0, 0, 0)
};

Dictionary<WorkflowIdentity, Activity> WorkflowVersionMap = new Dictionary<WorkflowIdentity, Activity>();
WorkflowVersionMap.Add(identityV1, new MortgageWorkflow());
WorkflowVersionMap.Add(identityV2, new MortgageWorkflow_v2());

WorkflowApplication wfApp = new WorkflowApplication(new MortgageWorkflow(), identityV1);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Run the workflow.
wfApp.Run();

Aşağıdaki örnekte, önceki örnekteki kalıcı iş akışı örneği hakkındaki bilgiler çağrılarak GetInstancealınır ve eşleşen iş akışı tanımını almak için kalıcı WorkflowIdentity bilgiler kullanılır. Bu bilgiler, öğesini yapılandırmak WorkflowApplicationiçin kullanılır ve iş akışı yüklenir. Load öğesini alan WorkflowApplicationInstance aşırı yükleme kullanıldığından, SqlWorkflowInstanceStore üzerinde WorkflowApplicationInstance yapılandırılan öğesinin tarafından WorkflowApplication kullanıldığını ve bu nedenle InstanceStore özelliğinin yapılandırılması gerekmediğini unutmayın.

Not

InstanceStore Özellik ayarlanırsa, veya tarafından WorkflowApplicationInstance kullanılan aynı örnekle SqlWorkflowInstanceStore ayarlanmalıdır; aksi takdirde aşağıdaki iletiyle bir ArgumentException oluşturulur: The instance is configured with a different InstanceStore than this WorkflowApplication..

// Get the WorkflowApplicationInstance of the desired workflow from the specified
// SqlWorkflowInstanceStore.
WorkflowApplicationInstance instance = WorkflowApplication.GetInstance(instanceId, store);

// Use the persisted WorkflowIdentity to retrieve the correct workflow
// definition from the dictionary.
Activity definition = WorkflowVersionMap[instance.DefinitionIdentity];

WorkflowApplication wfApp = new WorkflowApplication(definition, instance.DefinitionIdentity);

// Configure the WorkflowApplication with persistence and desired workflow event handlers.
ConfigureWorkflowApplication(wfApp);

// Load the persisted workflow instance.
wfApp.Load(instance);

// Resume the workflow...

.NET Framework 4 Kalıcılık Veritabanlarını İş Akışı Sürümü Oluşturma Desteğine Yükseltme

.NET Framework 4 veritabanı betikleri kullanılarak oluşturulan kalıcılık veritabanlarını yükseltmek için bir SqlWorkflowInstanceStoreSchemaUpgrade.sql veritabanı betiği sağlanır. Bu betik, veritabanlarını .NET Framework 4.5'te sunulan yeni sürüm oluşturma özelliklerini destekleyecek şekilde güncelleştirir. Veritabanlarındaki kalıcı iş akışı örneklerine varsayılan sürüm oluşturma değerleri verilir ve yan yana yürütmeye ve dinamik güncelleştirmeye katılabilir.

Bir .NET Framework 4.5 iş akışı uygulaması, sağlanan betik kullanılarak yükseltilmemiş bir kalıcılık veritabanında yeni sürüm oluşturma özelliklerini kullanan kalıcılık işlemlerini denerse, InstancePersistenceCommandException aşağıdaki iletiye benzer bir iletiyle bir oluşturulur.

The SqlWorkflowInstanceStore has a database version of '4.0.0.0'. InstancePersistenceCommand 'System.Activities.DurableInstancing.CreateWorkflowOwnerWithIdentityCommand' cannot be run against this database version.  Please upgrade the database to '4.5.0.0'.

Veritabanı şemasını yükseltmek için

  1. SQL Server Management Studio'yu açın ve kalıcılık veritabanı sunucusuna bağlanın, örneğin .\SQLEXPRESS.

  2. Dosya menüsünden Aç, Dosya'yı seçin. Aşağıdaki klasöre göz atın: C:\Windows\Microsoft.NET\Framework\v4.0.30319\sql\en

  3. SqlWorkflowInstanceStoreSchemaUpgrade.sql seçin ve Aç'a tıklayın.

  4. Kullanılabilir Veritabanları açılan listesinde kalıcılık veritabanının adını seçin.

  5. Sorgu menüsünden Yürüt'e tıklayın.

Sorgu tamamlandığında veritabanı şeması yükseltilir ve isterseniz kalıcı iş akışı örneklerine atanan varsayılan iş akışı kimliğini görüntüleyebilirsiniz. Nesne Gezgini Veritabanları düğümünde kalıcılık veritabanınızı genişletin ve ardından Görünümler düğümünü genişletin. System.Activities.DurableInstancing.Instances öğesine sağ tıklayın ve İlk 1000 Satırı Seç'i seçin. Sütunların sonuna kaydırın ve görünüme altı ek sütun eklendiğini unutmayın: IdentityName, IdentityPackage, Build, Major, Minor ve Revision. Kalıcı iş akışları, null iş akışı kimliğini temsil eden bu alanlar için NULL değerine sahip olur.