Using Workflow Extensions (context.GetExtension) in IIS-hosted workflows
-
Wednesday, March 24, 2010 7:22 PM
I must be missing something simple, but how is one supposed to set default extension providers for IIS hosted workflows (eg. XAMLX)?
I want to inject a service and use it in many activities like:
IFoo aFoo = context.GetExtension<IFoo>();
If I were hosting it myself I would have access to a WorkflowServiceHost and at startup would do something like:
host.WorkflowExtensions.Add<IFoo>(() => new FooImp());
but how would I set an IFoo for my XAMLX instances to use?
Thanks!
All Replies
-
Wednesday, March 24, 2010 7:42 PM
Basically you use an IServiceBehavior to add the extension and a BehaviorExtensionElement to add the IServiceBehavior.
public class StringWriterBehavior : IServiceBehavior { public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { var host = (WorkflowServiceHost)serviceHostBase; host.WorkflowExtensions.Add<TextWriter>(() => new StringWriter()); } }public class StringWriterElement : BehaviorExtensionElement { public override Type BehaviorType { get { return typeof(StringWriterBehavior); } } protected override object CreateBehavior() { return new StringWriterBehavior(); } }And the config file:
<system.serviceModel> <extensions> <behaviorExtensions> <add name=“stringWriter“ type="OrderService.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>Maurice- Marked As Answer by Scott Mason - MSFTModerator Thursday, March 25, 2010 11:15 PM

