Я думаю, что было бы правильно перефразировать ваш вопрос как:
Есть ли способ изменить WorkflowServiceHostFactory по умолчанию для веб-приложения, чтобы при активации без конфигурации xamlx вместо меня использовался мой WSHF.
Если я правильно понял ваш вопрос, то не думаю, что есть способ сделать это. У меня был быстрый взгляд, чтобы увидеть, есть ли место, которое вы можете переопределить, но не смогли его увидеть. Другой способ добиться этого - при необходимости изменить web.config, когда пользователь загружает новый рабочий процесс. Редактирование файла web.config в полете должно привести к тому, что любые текущие импульсы выполнения будут обслуживаться существующим доменом приложений, в то время как новый домен приложений создается для обслуживания новых запросов к веб-приложению. Таким образом, не должно происходить потери обработки рабочего процесса. Это, конечно, потребует некоторого тестирования и проверки.
UPDATE
Похоже, это возможно. Если вы добавите следующее в ваш файл web.config (который является конфигурацией по умолчанию для активации рабочего процесса).
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.xaml.hosting"
type="System.Xaml.Hosting.Configuration.XamlHostingSectionGroup, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="httpHandlers"
type="System.Xaml.Hosting.Configuration.XamlHostingSection, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</sectionGroup>
</configSections>
<system.xaml.hosting>
<httpHandlers>
<add xamlRootElementType="System.ServiceModel.Activities.WorkflowService, System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
httpHandlerType="System.ServiceModel.Activities.Activation.ServiceModelActivitiesActivationHandlerAsync, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add xamlRootElementType="System.Activities.Activity, System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
httpHandlerType="System.ServiceModel.Activities.Activation.ServiceModelActivitiesActivationHandlerAsync, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpHandlers>
</system.xaml.hosting>
</configuration>
Класс ServiceModelActivitiesActivationHandlerAsync, используемый этой конфигурацией по умолчанию, реализован следующим образом:
internal class ServiceModelActivitiesActivationHandlerAsync : ServiceHttpHandlerFactory, IServiceModelActivationHandler
{
// Methods
public ServiceHostFactoryBase GetFactory()
{
return new WorkflowServiceHostFactory();
}
}
Затем вместо использования ServiceModelActivitiesActivationHandlerAsync создайте реализацию самостоятельно, которая создает экземпляр своего собственного WorkflowServiceHostFactory в методе GetFactory. Обновите web.config выше, чтобы он указывал на ваш новый httpHandlerType, и все готово.
Я вообще не проверял это. Возможно, IIS не понравится web.config, переопределяющий раздел system.xaml.hosting.