WorkflowServiceHost Yan Yana Sürüm Oluşturma
WorkflowServiceHost.NET Framework 4.5'te sunulan yan yana sürüm oluşturma, bir iş akışı hizmetinin birden çok sürümünü tek bir uç noktada barındırma özelliği sağlar. Sağlanan yan yana işlevsellik, bir iş akışı hizmetinin yeni örneklerinin yeni iş akışı tanımı kullanılarak oluşturulması için yapılandırılmasına olanak tanırken, mevcut tanımı kullanarak tamamlanan örnekleri çalıştırır. Bu konu, kullanarak WorkflowServiceHostiş akışı hizmetinin yan yana yürütülmesine genel bir bakış sağlar.
İş Akışı Hizmetinde Birden Çok Sürümü Barındırma
WorkflowServiceHost bir iş akışının birden çok sürümünün yan yana yürütülmesine izin verecek şekilde yapılandırılabilir iki özellik içerir: SupportedVersions ve DefinitionIdentity. SupportedVersions , iş akışı hizmetinin desteklenen sürümlerini içerir ve DefinitionIdentity her iş akışı hizmetini benzersiz olarak tanımlamak için kullanılır. Bu, iş akışı hizmetiyle ilişkilendirilerek WorkflowIdentity yapılır. A 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. Koleksiyonda SupportedVersions yer alan her iş akışı hizmetinin benzersiz WorkflowIdentitybir olması gerekir. Üç özelliğinden herhangi biri başka WorkflowIdentitybir özelliğinden farklıysa, A WorkflowIdentity benzersizdir. , null
WorkflowIdentity için DefinitionIdentityizin verilebilen bir değerdir, ancak bir iş akışı hizmetinin yalnızca bir önceki sürümüne null
WorkflowIdentitysahip olabilir.
Önemli
A WorkflowIdentity , kişisel bilgiler (PII) içermemelidir. WorkflowIdentity üç bölümden oluşur: a Name (String), a Version (Version) ve a Package (String). Ö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.
bir İş Akışı Hizmetinin Birden Çok Sürümünü Barındırma Kuralları
Kullanıcı öğesine WorkflowServiceHostek bir sürüm eklediğinde, bir iş akışı hizmetinin aynı uç nokta ve açıklama kümesiyle barındırılabilmesi için karşılanması gereken çeşitli koşullar vardır. Ek sürümlerden herhangi biri bu koşulları karşılamıyorsa, WorkflowServiceHost çağrıldığında Open
bir özel durum oluşturur. Ek sürüm olarak konağa sağlanan her iş akışı tanımı aşağıdaki gereksinimleri karşılamalıdır (burada birincil sürüm, konak oluşturucusunun sağladığı iş akışı hizmet tanımıdır). Ek iş akışı sürümü:
İş akışı hizmetinin birincil sürümüyle aynı Name olmalıdır.
Birincil sürümde Body olmayan hiçbir Receive veya SendReply etkinliği olmamalıdır ve işlem sözleşmesiyle eşleşmelidir.
Benzersiz DefinitionIdentitybir öğesine sahip olun. Bir ve yalnızca bir iş akışı tanımına
null
DefinitionIdentitysahip olabilir.
Bazı değişikliklere izin verilir. Aşağıdaki öğeler sürümler arasında farklı olabilir:
birincil DefinitionIdentity sürümden farklı bir Ad ve Pakete sahip olabilir.
Değer AllowBufferedReceive birincil sürümden farklı olabilir.
ConfigurationName birincil sürümden farklı olabilir.
ImplementedContracts birincil sürümden farklı olabilir.
DefinitionIdentity'yi yapılandırma
İş akışı tasarımcısı kullanılarak bir iş akışı hizmeti oluşturulduğunda , DefinitionIdentity Özellikler penceresi kullanılarak ayarlanır. İş akışı hizmetini seçmek için tasarımcıda hizmetin kök etkinliğinin dışına tıklayın ve Görünüm menüsünden Özellikler Penceresi'ni seçin. DefinitionIdentity özelliğinin yanında görünen açılan listeden WorkflowIdentity'yi seçin ve ardından genişletip istenen WorkflowIdentity özellikleri belirtin. Aşağıdaki örnekte ve DefinitionIdentity ile Version Name MortgageWorkflow
1.0.0.0
yapılandırılır. Package isteğe bağlıdır ve bu örnekte şeklindedir null
.
Bir iş akışı hizmeti şirket içinde barındırıldığında, DefinitionIdentity iş akışı hizmeti oluşturulduğunda yapılandırılır. Aşağıdaki örnekte , DefinitionIdentity ve 1.0.0.0
Name ile önceki örnekle aynı değerlerle Name MortgageWorkflow
yapılandırılır.
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
bir DefinitionIdentity gerekli değildir, ancak iş akışı hizmetinin yalnızca bir sürümünde nullDefinitionIdentity olabilir.
Not
Bu, hizmet başlangıçta yapılandırılmadan DefinitionIdentity dağıtıldıysa ve ardından güncelleştirilmiş bir sürüm oluşturulduysa kullanışlıdır.
Web'de Barındırılan İş Akışı Hizmetine Yeni Sürüm Ekleme
Web'de barındırılan bir hizmette iş akışı hizmetinin yeni bir sürümünü yapılandırmanın ilk adımı, klasörde hizmet dosyasıyla aynı ada sahip yeni bir klasör App_Code
oluşturmaktır. Hizmetin xamlx
dosyası olarak adlandırılırsa MortgageWorkflow.xamlx
, klasörün adı MortgageWorkflow
olmalıdır. Özgün hizmet xamlx
dosyasının bir kopyasını bu klasöre yerleştirin ve gibi MortgageWorkflowV1.xamlx
yeni bir adla yeniden adlandırın. Birincil hizmette istediğiniz değişiklikleri yapın, öğesini güncelleştirin DefinitionIdentityve ardından hizmeti dağıtın. Aşağıdaki örnekte , DefinitionIdentity ve ile güncelleştirilmiştir 2.0.0.0
Name MortgageWorkflow
Version.
Hizmet yeniden başlatıldığında, önceki sürüm belirlenen App_Code
alt klasörde bulunduğundan koleksiyona otomatik olarak eklenirSupportedVersions. İş akışı hizmetinin birincil sürümünde önceki null
DefinitionIdentity sürümlerin eklenmeyeceğini unutmayın. Bir sürümün bir null
DefinitionIdentitysürümü olabilir, ancak birden çok sürüm varsa, birincil sürüm ile birlikte null
DefinitionIdentity olmamalıdır, aksi takdirde önceki sürümler koleksiyona SupportedVersions eklenmez.
Şirket İçinde Barındırılan İş Akışı Hizmetine Yeni Sürüm Ekleme
Şirket içinde barındırılan bir iş akışı hizmetine yeni bir sürüm eklerken , WorkflowServiceHost iş akışı hizmetinin birincil sürümüyle yapılandırılır ve önceki sürümlerin SupportedVersions koleksiyona açıkça eklenmesi gerekir. Aşağıdaki örnekte , iş WorkflowServiceHost akışı tanımı kullanan MortgageWorkflowV2
birincil iş akışı hizmetiyle yapılandırılır ve bir iş akışı tanımıyla yapılandırılmış bir MortgageWorkflowV1
iş akışı hizmeti koleksiyona SupportedVersions eklenir. Her iş akışı hizmeti, iş akışı tanımının sürümünü yansıtan benzersiz DefinitionIdentity bir şekilde yapılandırılır.
// 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)