Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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, WorkflowIdentity barındırma ile WorkflowApplication kullanımına genel bir 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
WorkflowIdentity kullanmak iç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 WorkflowIdentity hakkında bilgi, çalışma süresi boyunca aktivite yaşam döngüsünde birkaç farklı noktada 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 WorkflowIdentity örneği izleme kayıtlarında çalışma zamanı tarafından yayımlanacağı ve izleme kayıtlarını görüntüleme erişimi olan herkes tarafından görülebileceği için herhangi bir 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 iş akışı örneğini yeniden yüklerken kullanılan, kalıcı WorkflowIdentity ile eşleşmiyorsa, bir VersionMismatchException fırlatılır. Aşağıdaki örnekte, önceki örnekte kaydedilen MortgageWorkflow örneği üzerinde bir yükleme denemesi yapılmaktadır. Bu yük denemesi, WorkflowIdentity ipotek iş akışının kalıcı örnekle eşleşmeyen daha yeni bir sürümü için yapılandırılmış olarak 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üldüğünde aşağıdaki VersionMismatchException atılır.
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 WorkflowIdentity'ını almak için GetInstance yöntemi kullanılır. GetInstance yöntemi, kaydedilmiş iş akışı örneğinin Id ve SqlWorkflowInstanceStore'yi içeren kaydedilmiş örneği alır ve bir WorkflowApplicationInstance döndürür. , 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 WorkflowIdentity ile ilişkilendirilmemiş şekilde kalıcı hale getirilmiş olan örnekleri uygun iş akışı tanımıyla 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> kullanılarak WorkflowIdentity örnekleri, eşleşen iş akışı tanımlarıyla ilişkilendirilir ve MortgageWorkflow ile ilişkilendirilmiş identityV1WorkflowIdentity iş akışı tanımından 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 bilgi, WorkflowApplication öğeyi yapılandırmak için kullanılır ve ardından iş akışı yüklenir. Çünkü Load'yi alan WorkflowApplicationInstance aşırı yüklemesi kullanıldığından bu yüzden SqlWorkflowInstanceStore tarafından, WorkflowApplicationInstance üzerinde yapılandırılmış olan WorkflowApplication kullanılır ve bu nedenle InstanceStore özelliğinin yapılandırılmasına gerek yoktur.
Not
InstanceStore Özellik ayarlanırsa, SqlWorkflowInstanceStore tarafından kullanılan aynı WorkflowApplicationInstance örneği ile ayarlanmalıdır; aksi takdirde aşağıdaki mesajla 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ümlendirme özelliklerini kullanan herhangi bir kalıcılık işlemini denerse, benzer bir mesajla birlikte bir InstancePersistenceCommandException istisnası fırlatılır.
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
SQL Server Management Studio'yu açın ve kalıcılık veritabanı sunucusuna bağlanın, örneğin .\SQLEXPRESS.
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\enSqlWorkflowInstanceStoreSchemaUpgrade.sql seçin ve Aç'a tıklayın.
Kullanılabilir Veritabanları açılan listesinde kalıcılık veritabanının adını seçin.
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 üzerinde sağ tıklayın ve İlk 1000 Satırı Seç seçeneğini 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.