Кто-нибудь знает, можно ли разместить собственное приложение WorkflowServiceHost в IIS, не превращая его в файл XAMLX? Если да, то как?

Кроме того, есть ли у кого-нибудь хорошие рекомендации по развертыванию файлов XAMLX в целом в IIS 7?

Заранее спасибо

1
Ian 4 Мар 2011 в 13:21
Что вы подразумеваете под самостоятельным размещением? Как только он будет размещен самостоятельно, зачем снова размещать его?
 – 
Ladislav Mrnka
4 Мар 2011 в 13:28
Извините, да, я вижу, как это сбивает с толку. Я имею в виду, что я написал службу, которая размещается самостоятельно, но я хочу разместить ее сейчас, а не в IIS, чтобы воспользоваться преимуществами мониторинга работоспособности и т. д. Мне нужно знать самый простой способ сделать это.
 – 
Ian
7 Мар 2011 в 12:17

1 ответ

Вы можете сделать то же самое, написав свой собственный механизм хостинга вместо 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();

Это немного больше, чем только вышеизложенное, но оно дает основные концепции того, как это будет работать.

ИЗМЕНИТЬ (23 марта 2011 г.)

Если кому-то нужна копия базового кода для этого, найдите способ связаться со мной.

3
JasonRShaver 23 Мар 2011 в 18:11