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. , nullWorkflowIdentity için DefinitionIdentityizin verilebilen bir değerdir, ancak bir iş akışı hizmetinin yalnızca bir önceki sürümüne nullWorkflowIdentitysahip 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 nullDefinitionIdentitysahip olabilir.

Bazı değişikliklere izin verilir. Aşağıdaki öğeler sürümler arasında 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 VersionNameMortgageWorkflow1.0.0.0yapılandırılır. Package isteğe bağlıdır ve bu örnekte şeklindedir null.

Screenshot that shows the DefinitionIdentity property.

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.0Name ile önceki örnekle aynı değerlerle NameMortgageWorkflow 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ı MortgageWorkflowolmalıdır. Özgün hizmet xamlx dosyasının bir kopyasını bu klasöre yerleştirin ve gibi MortgageWorkflowV1.xamlxyeni 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.0NameMortgageWorkflowVersion.

Screenshot that shows DefinitionIdentity of WorkflowIdentity.

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 nullDefinitionIdentity sürümlerin eklenmeyeceğini unutmayın. Bir sürümün bir nullDefinitionIdentitysürümü olabilir, ancak birden çok sürüm varsa, birincil sürüm ile birlikte nullDefinitionIdentity 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)