2011-03-04 151 views
1

有誰知道是否可以在IIS中託管自託管的WorkflowServiceHost應用程序而無需將其轉換爲XAMLX文件?如果是這樣,怎麼樣?在IIS中託管自託管的WF

此外,沒有任何人有在一般部署XAMLX文件到IIS 7的任何良好的指引?

在此先感謝

+0

你是什麼意思自我託管?一旦它被自己託管,爲什麼要再次託管它? – 2011-03-04 10:28:18

+0

對不起,我看到它是如何令人困惑。我的意思是我寫了一個自託管的服務,但我想現在託管它,而不是在IIS下利用健康監控等。我需要知道最簡單的方法。 – Ian 2011-03-07 09:17:04

回答

3

你可以做同樣的基本的東西寫你自己的託管引擎,而不是XAMLX之一。然後,您可以通過ASP.NET加載應用程序,但可以完全控制它的使用壽命/生命週期。

你必須創建自己的主機到.XAML工作流加載到像一個WorkflowApplication和管理工作流程的壽命。它看起來是這樣的:

private SqlWorkflowInstanceStore _InstanceStore { get; private set; } 
private InstanceHandle _MyInstanceHandle { get; private set; } 

_InstanceStore = new SqlWorkflowInstanceStore(DataStore.ConnectionString.Replace("MultipleActiveResultSets=True", "MultipleActiveResultSets=False")); 
_InstanceStore.HostLockRenewalPeriod = new TimeSpan(0, 0, 30); 
_InstanceStore.InstanceEncodingOption = InstanceEncodingOption.None; 
_InstanceStore.InstanceLockedExceptionAction = InstanceLockedExceptionAction.BasicRetry; 
_InstanceStore.InstanceCompletionAction = InstanceCompletionAction.DeleteNothing; 

_MyInstanceHandle = _InstanceStore.CreateInstanceHandle(); 
var CreateOwnerCommand = new CreateWorkflowOwnerCommand(); 
var MyView = _InstanceStore.Execute(_MyInstanceHandle, CreateOwnerCommand, TimeSpan.FromSeconds(30)); 
_InstanceStore.DefaultInstanceOwner = MyView.InstanceOwner; 

WorkflowApplication ThisApplication = null; 

if (parameters == null) 
    ThisApplication = new WorkflowApplication(activity); 
else 
    ThisApplication = new WorkflowApplication(activity, parameters); 
ThisApplication.PersistableIdle = e => PersistableIdleAction.Unload; 
ThisApplication.InstanceStore = this.InstanceStore; 
ThisApplication.Run(); 

有更多的它然後只是上面的,但它給它如何工作的基本概念。

EDIT(2011年3月23日)

如果有人想基本的代碼來做到這一點的副本,找到一個方法來與我聯繫。