İş Akışı Hizmeti Ana Bilgisayar Genişletilebilirliği
.NET Framework 4.6.1, iş akışı hizmetlerini barındırma sınıfını sağlar WorkflowServiceHost . Bu sınıf, yönetilen bir uygulamada veya Windows hizmetinde bir iş akışı hizmetini kendi kendine barındırırken kullanılır. Bu sınıf, Internet Information Services (IIS) veya Windows İşlem Etkinleştirme Hizmeti (WAS) ile bir iş akışı hizmeti barındırırken de kullanılır. sınıfı WorkflowServiceHost , özel uzantılar eklemenize, boşta kalma davranışını değiştirmenize ve hizmet dışı iş akışlarını (mesajlaşma etkinliklerini kullanmayan iş akışları) barındırmanıza olanak sağlayan uzantı noktaları sağlar.
İş Akışı Hizmeti Ana Bilgisayar Uzantıları
, WorkflowServiceHost öğesine uzantı WorkflowServiceHosteklemek için yöntemler sağlayan türde WorkflowInstanceExtensionManager bir WorkflowExtensions özellik içerir. Add Her iş akışı hizmeti örneği için bir uzantı eklemek için yöntemini kullanın. Belirtilen temsilci, bir iş akışı hizmeti örneği oluşturulduğunda veya kalıcılık deposundan yüklendiğinde yeni bir uzantı oluşturmak için çağrılır. Add Her iş akışı hizmeti konağı için bir uzantı eklemek için yöntemini kullanın; uzantının bir örneği tüm iş akışı hizmeti örnekleri için paylaşılır.
İşlenmeyen Özel Durumlara Tepki Verme
, WorkflowUnhandledExceptionBehavior iş akışı hizmetinde işlenmeyen bir özel durum oluşursa gerçekleştireceğiniz eylemi belirtmenizi sağlar. Action özelliği değerlerden birini WorkflowUnhandledExceptionAction belirtir:
Abandon – İş akışı hizmeti örneğini durdurur.
AbandonAndSuspend – Son kalıcı duruma geri döner ve iş akışı hizmeti örneğini askıya alır. Bu yalnızca iş akışı en az bir kez kalıcı hale geldiyse oluşur. Aksi takdirde iş akışı örneği durduruldu.
Cancel – Örneği iptal eder.
Terminate – Örneği sonlandırır.
Bu davranış, aşağıdaki örnekte gösterildiği gibi kodda yapılandırılabilir.
host.Description.Behaviors.Add(new WorkflowUnhandledExceptionBehavior { Action = WorkflowUnhandledExceptionAction.Abandon });
Aşağıdaki örnekte gösterildiği gibi bir yapılandırma dosyasında da yapılandırılabilir.
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
<workflowUnhandledExceptionBehavior action="Abandon" />
</behavior>
</serviceBehaviors>
</behaviors>
Hizmet Dışı İş Akışlarını Barındırma
WorkflowServiceHost hizmet dışı iş akışlarını veya bir etkinlikle Receive başlamayan iş akışlarını veya mesajlaşma etkinliklerini kullanmayan iş akışlarını barındırmak için kullanılabilir. İş akışı hizmetleri normalde bir Receive etkinlikle başlar. WorkflowServiceHost bir iş akışı hizmeti için bir ileti aldığında, henüz çalışmıyorsa (veya kalıcı değilse) yeni bir iş akışı hizmeti örneği oluşturulur. Bir iş akışı Alma etkinliğiyle başlamazsa, iletiyi alacak etkinlik olmadığından ileti göndererek başlatılamaz. Hizmet dışı bir iş akışını barındırmak için, öğesinden WorkflowHostingEndpoint bir sınıf türetin ve , OnGetCreationContextve OnResolveBookmarköğesini geçersiz kılınOnGetInstanceId. Tercih edilen örnek kimliğini sağlamak istiyorsanız geçersiz kılın OnGetInstanceId . Özel iş akışı oluşturma bağlamı oluşturmak veya var olan WorkflowCreationContextörneğini doldurmak için geçersiz kılınOnGetCreationContext. Gelen iletiden yer işaretini el ile ayıklamak için geçersiz kılın OnResolveBookmark . Bu yöntemi geçersiz kılarsanız, WorkflowHostingEndpoint'e gönderilen iletiyi yanıtlamak için gövdesinde çağırmanız SendResponse gerekir. Bunu yapmazsanız, sonunda bir MaxConcurrentCalls sınır aşılabilir. İki yönlü sözleşmelerde istemcinin yanıt almaması nedeniyle çağrılmama SendResponse durumunuzu algılayabilirsiniz. Tek yönlü sözleşmelerde, azaltma sınırı aşıldıktan sonra çok geç olana kadar arama SendResponse yapmama hatasını MaxConcurrentCalls fark edemeyebilirsiniz. Hizmet dışı iş akışının yeni bir örneğini oluşturmak için, yeni bir örnek oluşturan işlemi tanımlayan bir hizmet sözleşmesi bildirin. Oluşturma işlemi, gerekli iş akışı parametrelerini geçirmek için bir IDictionary<dizesi ( nesnesi> ) almalıdır. Bu sözleşme, -derived sınıfı tarafından WorkflowHostingEndpointörtük olarak uygulanır. İş akışını barındırırken çağırıp çağırarak AddServiceEndpointOpen-derived sınıfının bir örneğini WorkflowHostingEndpointkonağa ekleyin. İş akışının bir örneğini oluşturmak için hizmet sözleşmesi türünüzün bir ChannelFactory<TChannel> örneğini oluşturun ve öğesini çağırın CreateChannel. Ardından hizmet sözleşmenizde tanımlanan oluşturma işlemini çağırabilirsiniz.