2011-03-04 118 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日)

如果有人想基本的代码来做到这一点的副本,找到一个方法来与我联系。