Aracılığıyla paylaş


Nasıl yapılır: İş akışları ve iş akışı hizmetleri için SQL kalıcılığını etkinleştirme

Bu makalede, hem program aracılığıyla hem de yapılandırma dosyası kullanarak iş akışlarınız ve iş akışı hizmetleriniz için kalıcılığı etkinleştirmek üzere SQL İş Akışı Örneği Deposu özelliğinin nasıl yapılandırıldığı açıklanmaktadır.

Windows Server App Fabric, kalıcılığı yapılandırma işlemini basitleştirir. Daha fazla bilgi için bkz . App Fabric Kalıcılık Yapılandırması.

SQL İş Akışı Örneği Deposu özelliğini kullanmadan önce, özelliğin iş akışı örneklerini kalıcı hale getirmek için kullandığı bir veritabanı oluşturun. .NET Framework 4.6.1 kurulum programı, SQL İş Akışı Örnek Deposu özelliğiyle ilişkili SQL betik dosyalarını %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN klasörüne kopyalar. Bu betik dosyalarını, SQL İş Akışı Örneği Deposu'nu iş akışı örneklerini kalıcı hale getirmek için kullanmasını istediğiniz bir SQL Server 2005 veya SQL Server 2008 veritabanında çalıştırın. önce SqlWorkflowInstanceStoreSchema.sql dosyasını çalıştırın ve ardından SqlWorkflowInstanceStoreLogic.sql dosyasını çalıştırın.

Not

Kalıcılık veritabanını temiz bir veritabanı olacak şekilde temizlemek için betikleri %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN içinde aşağıdaki sırayla çalıştırın.

  1. SqlWorkflowInstanceStoreSchema.sql
  2. SqlWorkflowInstanceStoreLogic.sql

Önemli

Kalıcılık veritabanı oluşturmazsanız, bir konak iş akışlarını kalıcı hale getirmeye çalıştığında SQL İş Akışı Örnek Deposu özelliği aşağıdakine benzer bir özel durum oluşturur.

System.Data.SqlClient.SqlException: 'System.Activities.DurableInstancing.CreateLockOwner' saklı yordamı bulunamadı

Aşağıdaki bölümlerde, SQL İş Akışı Örnek Deposu kullanılarak iş akışları ve iş akışı hizmetleri için kalıcılığın nasıl etkinleştirileceği açıklanmaktadır. SQL İş Akışı Örnek Deposu'nun özellikleri hakkında daha fazla bilgi için bkz . SQL İş Akışı Örnek Deposu Özellikleri.

WorkflowApplication kullanan şirket içinde barındırılan iş akışları için kalıcılığı etkinleştirme

Nesne modelini kullanarak SqlWorkflowInstanceStore program aracılığıyla kullanılan WorkflowApplication şirket içinde barındırılan iş akışları için kalıcılığı etkinleştirebilirsiniz. Aşağıdaki yordamda bunu yapmak için adımlar yer alır.

  1. System.Activities.DurableInstancing.dll bir başvuru ekleyin.

  2. Var olan "using" deyimlerinden sonra kaynak dosyanın en üstüne aşağıdaki deyimi ekleyin.

    using System.Activities.DurableInstancing;
    
  3. Aşağıdaki kod örneğinde gösterildiği gibi bir SqlWorkflowInstanceStore oluşturup öğesine atayın InstanceStore WorkflowApplication .

    SqlWorkflowInstanceStore store =
        new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI");
    
    WorkflowApplication wfApp =
        new WorkflowApplication(new Workflow1());
    
    wfApp.InstanceStore = store;
    

    Not

    SQL Server sürümünüze bağlı olarak, bağlantı dizesi sunucu adı farklı olabilir.

  4. Persist Bir iş akışını kalıcı hale getirmek için nesnesinde WorkflowApplication yöntemini veya Unload bir iş akışını kalıcı hale getirmek ve kaldırmak için yöntemini çağırın. Ayrıca nesnesi tarafından tetiklenen olayı işleyebilir PersistableIdle ve öğesinin WorkflowApplication uygun (Persist veya Unload) üyesini PersistableIdleActiondöndürebilirsiniz.

    wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
    {
        return PersistableIdleAction.Persist;
    };
    

Not

Adım adım yönergeler için Başlangıç Öğreticisi'nin Nasıl yapılır: Uzun Süre Çalışan İş Akışı Oluşturma ve Çalıştırma adımına bakın.

WorkflowServiceHost kullanan şirket içinde barındırılan iş akışı hizmetleri için kalıcılığı etkinleştirme

Sınıfını veya DurableInstancingOptions sınıfını kullanarak program aracılığıyla kullanan WorkflowServiceHost şirket içinde barındırılan SqlWorkflowInstanceStoreBehavior iş akışı hizmetleri için kalıcılığı etkinleştirebilirsiniz.

SqlWorkflowInstanceStoreBehavior sınıfını kullanma

Aşağıdaki yordam, şirket içinde barındırılan SqlWorkflowInstanceStoreBehavior iş akışı hizmetlerinde kalıcılığı etkinleştirmek için sınıfını kullanma adımlarını içerir.

  1. System.ServiceModel.dll bir başvuru ekleyin.

  2. Var olan "using" deyimlerinden sonra kaynak dosyanın en üstüne aşağıdaki deyimi ekleyin.

    using System.ServiceModel.Activities.Description;
    
  3. öğesinin bir örneğini WorkflowServiceHost oluşturun ve iş akışı hizmeti için uç noktalar ekleyin.

    WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress));
    host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
    
  4. Bir SqlWorkflowInstanceStoreBehavior nesnesi oluşturma ve davranış nesnesinin özelliklerini ayarlama.

    SqlWorkflowInstanceStoreBehavior instanceStoreBehavior = new SqlWorkflowInstanceStoreBehavior(connectionString);
    instanceStoreBehavior.HostLockRenewalPeriod = new TimeSpan(0, 0, 5);
    instanceStoreBehavior.InstanceCompletionAction = InstanceCompletionAction.DeleteAll;
    instanceStoreBehavior.InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry;
    instanceStoreBehavior.InstanceEncodingOption = InstanceEncodingOption.GZip;
    instanceStoreBehavior.RunnableInstancesDetectionPeriod = new TimeSpan("00:00:02");
    host.Description.Behaviors.Add(instanceStoreBehavior);
    
  5. İş akışı hizmeti ana bilgisayarını açın.

    host.Open();
    

DurableInstancingOptions özelliğini kullanma

uygulandığında SqlWorkflowInstanceStoreBehavior , DurableInstancingOptions.InstanceStore üzerindeki WorkflowServiceHost , yapılandırma değerleri kullanılarak oluşturulan nesneye SqlWorkflowInstanceStore ayarlanır. Aşağıdaki kod örneğinde gösterildiği gibi sınıfını kullanmadan SqlWorkflowInstanceStoreBehavior öğesinin WorkflowServiceHost özelliğini ayarlamak DurableInstancingOptions için program aracılığıyla aynı işlemi yapabilirsiniz.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Yapılandırma dosyası kullanarak WorkflowServiceHost kullanan WAS tarafından barındırılan iş akışı hizmetleri için kalıcılığı etkinleştirme

Yapılandırma dosyasını kullanarak şirket içinde barındırılan veya Windows İşlem Etkinleştirme Hizmeti (WAS) tarafından barındırılan iş akışı hizmetleri için kalıcılığı etkinleştirebilirsiniz. WAS tarafından barındırılan iş akışı hizmeti, şirket içinde barındırılan iş akışı hizmetlerinde olduğu gibi WorkflowServiceHost'u kullanır.

SqlWorkflowInstanceStoreBehavior, XML yapılandırması aracılığıyla SQL İş Akışı Örneği Deposu özelliklerini rahatça değiştirmenize olanak tanıyan bir hizmet davranışıdır. WAS tarafından barındırılan iş akışı hizmetleri için Web.config dosyasını kullanın. Aşağıdaki yapılandırma örneğinde, yapılandırma dosyasındaki davranış öğesini kullanarak SQL İş Akışı Örneği Deposu'na nasıl yapılandırılır sqlWorkflowInstanceStore gösterilmektedir.

<serviceBehaviors>
    <behavior name="">
        <sqlWorkflowInstanceStore
                    connectionString="Data Source=(local);Initial Catalog=DefaultPersistenceProviderDb;Integrated Security=True;Async=true"
                    instanceEncodingOption="GZip | None"
                    instanceCompletionAction="DeleteAll | DeleteNothing"
                    instanceLockedExceptionAction="NoRetry | BasicRetry |AggressiveRetry"
                    hostLockRenewalPeriod="00:00:30"
                    runnableInstancesDetectionPeriod="00:00:05" />

    </behavior>
</serviceBehaviors>

Önemli

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Azure SQL'e bağlanıyorsanız önerilen kimlik doğrulama yöntemi Azure kaynakları için Yönetilen Kimlikler'dir.

veya connectionStringName özelliği için connectionString değer ayarlamazsanız, SQL İş Akışı Örnek Deposu varsayılan olarak bağlantı dizesi DefaultSqlWorkflowInstanceStoreConnectionStringadını kullanır.

uygulandığında SqlWorkflowInstanceStoreBehavior , DurableInstancingOptions.InstanceStore üzerindeki WorkflowServiceHost , yapılandırma değerleri kullanılarak oluşturulan nesneye SqlWorkflowInstanceStore ayarlanır. hizmet davranışı öğesini kullanmadan ile WorkflowServiceHost kullanmak SqlWorkflowInstanceStore için program aracılığıyla aynı işlemi yapabilirsiniz.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Önemli

Kullanıcı adları ve parolalar gibi hassas bilgileri Web.config dosyasında depolamamanızı öneririz. Hassas bilgileri Web.config dosyasında depolarsanız, dosya sistemi Erişim Denetim Listeleri 'ni (ACL' ler) kullanarak Web.config dosyasına erişimin güvenliğini sağlamalısınız. Ayrıca, Korumalı Yapılandırma Kullanarak Yapılandırma Bilgilerini Şifreleme bölümünde belirtildiği gibi yapılandırma dosyasındaki yapılandırma değerlerinin güvenliğini de sağlayabilirsiniz.

.NET Framework 4.6.1 yüklemesi, hizmetleriniz için kalıcılığı yapılandırmak üzere yapılandırma dosyasındaki hizmet davranışı öğesini kullanabilmeniz <sqlWorkflowInstanceStore> için Machine.config dosyasına aşağıdaki davranış uzantısı öğesini ekler.

<configuration>
    <system.serviceModel>
        <extensions>
            <behaviorExtensions>
                <add name="sqlWorkflowInstanceStore" type="System.Activities.DurableInstancing.SqlWorkflowInstanceStoreElement, System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            </behaviorExtensions>
        </extensions>
    </system.serviceModel>
</configuration>