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在控制台应用程序场景中轻松管理这个,但我看不到通过服务方法做任何明显的方法.我认为显然添加参考的程序化方法是需要的,但我再次对于如何解决这个问题感到茫然.
任何帮助将不胜感激.
最好的问候伊恩
WorkflowServiceHost具有WorkflowExtensions属性,您可以在其中添加工作流扩展.有几种方法可以做到这一点.如果您是自托管,那么在创建WorkflowServiceHost时这很容易.如果您使用IIS,则需要创建ServiceHostFactory来配置WorkflowServiceHost.最后,可以使用metadata.AddDefaultExtensionProvider()函数在活动的CacheMetadata中添加工作流扩展.
| 归档时间: |
|
| 查看次数: |
3313 次 |
| 最近记录: |