Как добавить пользовательский компонент PersistenceIOP для хостов, размещенных на веб-сервере.xamlx, с помощью web.config
Я пытаюсь продублировать приведенную ниже функциональность с помощью web.config, так как использую сервисы.xamlx, размещенные на веб-сервере.
host.WorkflowExtensions.Add(new HiringRequestInfoPersistenceParticipant());
Я попробовал следующее из того, что мне удалось собрать в поисках, но без удовлетворения.
<extensions>
<behaviorExtensions>
<add name="sqlTracking"
type="ApprovalService.Persistence.HiringRequestInfoPersistenceParticipant, ApprovalService.Persistence" />
</behaviorExtensions>
</extensions>
Любая помощь будет высоко ценится.
Вот мой обновленный web.config
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="sqlTracking"
type="ApprovalService.HiringInfoElement, ApprovalService"/>
</behaviorExtensions>
</extensions>
<services>
<service name="ApprovalService" behaviorConfiguration="ApprovalServiceBehavior">
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ApprovalServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false" />
<sqlWorkflowInstanceStore connectionStringName="WorkflowPersistence" />
<workflowIdle timeToPersist="0" timeToUnload="0:05:0"/>
<sqlTracking/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Все это компилируется и запускается, но пользовательский объект персистентности никогда не вызывается.
1 ответ
Решение
Вы добавили поведение sqlTracking в раздел поведения вашего сервиса?
Ниже приведен рабочий пример
public class StringWriterElement : BehaviorExtensionElement
{
public override Type BehaviorType
{
get { return typeof(StringWriterBehavior); }
}
protected override object CreateBehavior()
{
return new StringWriterBehavior();
}
}
public class StringWriterBehavior : IServiceBehavior
{
public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase)
{
var host = (WorkflowServiceHost)serviceHostBase;
host.WorkflowExtensions.Add<TextWriter>(() => new StringWriter());
}
}
И web.config:
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="stringWriter"
type=" MyWorkflowService.StringWriterElement, MyWorkflowService"/>
</behaviorExtensions>
</extensions>
<services>
<service name="OrderWorkflow“
behaviorConfiguration="OrderWorkflowBehavior">
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="OrderWorkflowBehavior">
<serviceMetadata httpGetEnabled="True"/>
<stringWriter />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>