1

有谁知道是否可以在 IIS 中托管自托管的 WorkflowServiceHost 应用程序而不将其转换为 XAMLX 文件?如果是这样,怎么做?

此外,对于将 XAMLX 文件通常部署到 IIS 7,是否有人有任何好的指导方针?

提前致谢

4

1 回答 1

3

您可以通过编写自己的托管引擎而不是 XAMLX 来完成相同的基本操作。然后,您可以通过 ASP.NET 加载应用程序,但可以完全控制其生命周期/生命周期。

您必须创建自己的主机才能将.XAML工作流加载到类似 a 的内容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();

除了上面的内容之外,它还有更多内容,但它给出了它如何工作的基本概念。

编辑(2011 年 3 月 23 日)

如果有人想要一份基本代码的副本来执行此操作,请找到联系我的方法。

于 2011-03-21T21:03:00.400 回答