Как добавить пользовательский компонент PersistenceIOP для хостов, размещенных на веб-сервере .xamlx, с помощью web.config - PullRequest
2 голосов
/ 26 сентября 2011

Я пытаюсь продублировать приведенную ниже функциональность с помощью 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 Ответ

3 голосов
/ 26 сентября 2011

Вы добавили поведение 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>
...