为工作流服务提供工作流扩展 - WF 4.0

Ian*_*Ian 2 wcf workflowservice workflow-foundation

问候一个人!

我是WF 4.0和WWF的新手,所以请原谅我,如果这似乎是一个新手类型的问题,但相信我,我已经深入研究了这个问题的解决方案,但无济于事.

我创建了一个带有自定义CodeActivity的示例WF应用程序,需要提供扩展,如下所示:

public sealed class PreparePizza : CodeActivity
{
    public InArgument<Order> Order { get; set; }

    protected override void CacheMetadata(CodeActivityMetadata metadata)
    {
        base.CacheMetadata(metadata);

        if (this.Order == null)
            metadata.AddValidationError("You must supply an Order.");

        metadata.RequireExtension<IPreparePizzaExtension>();
    }
    // If your activity returns a value, derive from CodeActivity<TResult>
    // and return the value from the Execute method.
    protected override void Execute(CodeActivityContext context)
    {
        // Obtain the runtime value of the Text input argument
        Order order = context.GetValue(this.Order);
        var extension = context.GetExtension<IPreparePizzaExtension>();
        extension.Prepare(order);
    }
}

public interface IPreparePizzaExtension
{
    void Prepare(Order order);
}
Run Code Online (Sandbox Code Playgroud)

然后,我将此活动插入工作流服务,并尝试通过添加服务引用来通过我的Web应用程序进行消费.但是,当我添加引用时,我得到:

System.Activities.ValidationException:必须配置"PizzaMan.ActivityLibrary.IPreparePizzaExtension"类型的扩展名才能运行此工作流程.

足够公平 - 当然我的活动要求我传递一个IPreparePizzaExtension的实现 - 毕竟,我告诉它!

所以我的问题是,我该如何将其传递给服务?我可以使用WorkflowInvoker在控制台应用程序场景中轻松管理这个,但我看不到通过服务方法做任何明显的方法.我认为显然添加参考的程序化方法是需要的,但我再次对于如何解决这个问题感到茫然.

任何帮助将不胜感激.

最好的问候伊恩

Mau*_*ice 7

WorkflowServiceHost具有WorkflowExtensions属性,您可以在其中添加工作流扩展.有几种方法可以做到这一点.如果您是自托管,那么在创建WorkflowServiceHost时这很容易.如果您使用IIS,则需要创建ServiceHostFactory来配置WorkflowServiceHost.最后,可以使用metadata.AddDefaultExtensionProvider()函数在活动的CacheMetadata中添加工作流扩展.