Share via


Penerapan Versi Berdampingan di WorkflowServiceHost

Penerapan versi berdampingan WorkflowServiceHost yang diperkenalkan di .NET Framework 4.5 menyediakan kemampuan untuk menghosting beberapa versi layanan alur kerja pada satu titik akhir. Fungsi berdampingan yang disediakan memungkinkan layanan alur kerja dikonfigurasi sehingga instans baru layanan alur kerja dibuat menggunakan definisi alur kerja baru, saat menjalankan instans selesai menggunakan definisi yang ada. Topik ini memberikan gambaran umum eksekusi berdampingan layanan alur kerja menggunakan WorkflowServiceHost.

Hosting Beberapa Versi dalam Layanan Alur Kerja

WorkflowServiceHost berisi dua properti yang dapat dikonfigurasi untuk memungkinkan beberapa versi alur kerja dijalankan berdampingan: SupportedVersions dan DefinitionIdentity. SupportedVersions berisi versi layanan alur kerja yang didukung, dan DefinitionIdentity digunakan untuk mengidentifikasi setiap layanan alur kerja secara unik. Ini dilakukan dengan mengaitkan WorkflowIdentity dengan layanan alur kerja. WorkflowIdentity berisi tiga informasi pengenal. Name dan Version berisi nama dan Version serta diperlukan, dan Package bersifat opsional serta dapat digunakan untuk menentukan string tambahan yang berisi informasi seperti nama rakitan atau informasi lain yang diinginkan. Setiap layanan alur kerja yang terkandung dalam koleksi SupportedVersions harus memiliki WorkflowIdentity yang unik. WorkflowIdentity bersifat unik jika salah satu dari tiga propertinya berbeda dari properti WorkflowIdentity lain. nullWorkflowIdentity adalah nilai yang diizinkan untuk DefinitionIdentity, tetapi hanya satu versi layanan alur kerja sebelumnya yang boleh memiliki nullWorkflowIdentity.

Penting

WorkflowIdentity tidak boleh berisi informasi pengidentifikasi pribadi (PII). WorkflowIdentity terdiri dari tiga bagian: a Name (String), a Version (Version), dan Package (String). Informasi tentang WorkflowIdentity yang digunakan untuk membuat instans dipancarkan ke layanan pelacakan yang dikonfigurasi di beberapa titik siklus hidup aktivitas yang berbeda oleh runtime bahasa umum. Pelacakan WF tidak memiliki mekanisme untuk menyembunyikan PII (data pengguna sensitif). Oleh karena itu, instans WorkflowIdentity tidak boleh berisi data PII apa pun karena akan dipancarkan oleh runtime bahasa umum dalam melacak rekaman dan dapat dilihat oleh siapa pun yang memiliki akses untuk melihat rekaman pelacakan.

Aturan untuk Hosting Beberapa Versi Layanan Alur Kerja

Saat pengguna menambahkan versi tambahan ke WorkflowServiceHost, ada beberapa kondisi yang harus dipenuhi agar layanan alur kerja dihosting dengan serangkaian titik akhir dan deskripsi yang sama. Jika salah satu versi tambahan gagal memenuhi ketentuan ini, WorkflowServiceHost akan mengeluarkan pengecualian saat Open dipanggil. Setiap definisi alur kerja yang disediakan untuk host sebagai versi tambahan harus memenuhi persyaratan berikut (di mana versi utama adalah definisi layanan alur kerja yang disediakan untuk konstruktor host). Versi alur kerja tambahan harus:

  • Memiliki Name yang sama dengan versi utama layanan alur kerja.

  • Tidak boleh memiliki aktivitas Receive atau SendReply dalam Body yang tidak ada dalam versi utama, dan aktivitas tersebut harus sesuai dengan kontrak operasi.

  • Memiliki DefinitionIdentity yang unik. Satu dan hanya satu definisi alur kerja mungkin memiliki nullDefinitionIdentity.

Beberapa perubahan diizinkan. Item berikut mungkin berbeda di antara versi:

Mengonfigurasi DefinitionIdentity

Saat layanan alur kerja dibuat menggunakan perancang alur kerja, DefinitionIdentity diatur menggunakan jendela Properti. Klik di luar aktivitas akar layanan di perancang untuk memilih layanan alur kerja, dan pilih Jendela Properti dari menu Tampilan. Pilih WorkflowIdentity dari daftar drop-down yang muncul di samping properti DefinitionIdentity , lalu perluas dan tentukan properti yang diinginkan WorkflowIdentity . Dalam contoh berikut, dikonfigurasi DefinitionIdentity dengan NameMortgageWorkflow dan Version dari 1.0.0.0. Package bersifat opsional dan dalam contoh ini adalahnull.

Screenshot that shows the DefinitionIdentity property.

Saat layanan alur kerja dihost sendiri, DefinitionIdentity dikonfigurasi saat layanan alur kerja dibangun. Dalam contoh berikut, DefinitionIdentity dikonfigurasi dengan nilai yang sama seperti contoh sebelumnya, dengan NameMortgageWorkflow dan Name dari 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  

DefinitionIdentity tidak diperlukan, meskipun hanya satu versi layanan alur kerja yang mungkin memiliki nullDefinitionIdentity.

Catatan

Ini berguna jika layanan awalnya disebarkan tanpa DefinitionIdentity dikonfigurasi, dan kemudian versi yang diperbarui dibuat.

Menambahkan Versi Baru ke Layanan Alur Kerja yang Dihosting Web

Langkah pertama dalam mengonfigurasi versi baru layanan alur kerja di layanan yang dihosting web adalah membuat folder baru di folder App_Code yang memiliki nama yang sama dengan file layanan. Jika berkas xamlx layanan bernama MortgageWorkflow.xamlx, maka map tersebut harus diberi nama MortgageWorkflow. Tempatkan salinan file xamlx layanan asli ke dalam folder ini dan ganti namanya menjadi nama baru, seperti MortgageWorkflowV1.xamlx. Buat perubahan yang diinginkan pada layanan utama, perbarui DefinitionIdentity-nya, lalu terapkan layanan. Dalam contoh berikut, DefinitionIdentity telah diperbarui dengan Name dari MortgageWorkflow dan Version dari 2.0.0.0.

Screenshot that shows DefinitionIdentity of WorkflowIdentity.

Saat layanan dimulai ulang, versi sebelumnya akan secara otomatis ditambahkan ke koleksi SupportedVersions karena terletak di subfolder App_Code yang ditentukan. Perhatikan bahwa jika versi utama layanan alur kerja memiliki nullDefinitionIdentity versi sebelumnya tidak akan ditambahkan. Satu versi mungkin memiliki nullDefinitionIdentity, tetapi jika ada beberapa versi, versi utama tidak boleh dengan nullDefinitionIdentity atau versi sebelumnya tidak akan ditambahkan ke koleksi SupportedVersions.

Menambahkan Versi Baru ke Layanan Alur Kerja yang Dihosting Sendiri

Saat menambahkan versi baru ke layanan alur kerja yang dihosting sendiri, WorkflowServiceHost dikonfigurasi dengan versi utama layanan alur kerja, dan versi sebelumnya harus secara eksplisit ditambahkan ke koleksi SupportedVersions. Dalam contoh berikut, WorkflowServiceHost dikonfigurasi dengan layanan alur kerja utama yang menggunakan definisi alur kerja MortgageWorkflowV2, dan layanan alur kerja yang dikonfigurasi dengan definisi alur kerja MortgageWorkflowV1 ditambahkan ke koleksi SupportedVersions. Setiap layanan alur kerja dikonfigurasi dengan DefinitionIdentity unik yang mencerminkan versi definisi alur kerja.

// 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)