WCF工作流服务REST接口

时间:2012-07-23 12:11:31

标签: c# wcf rest workflow workflowservice

  

可能重复:
  RESTful Workflow Service Endpoints in WF4 / WCF

我正在尝试使用REST界面使Windows Workflow Services 4.0正常工作。我有一个非常简单的工作流服务,名为“Service1”,带有receiveRequest和sendResponse活动。

默认情况下,WF服务自动生成实现的类和接口,但是我想强制WF服务使用我自己的REST启用接口而不是某些内部自动生成的接口。

界面如下:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke( UriTemplate = "/Data/{item}", Method = "GET" )]
    String GetData( Int32 item );
}

但是,我很难配置XAML以使用此接口。 我需要像这样的XAML配置来指定服务合同名称是我自己的合同:

 <Receive x:Name="__ReferenceID0" CanCreateInstance="True" DisplayName="ReceiveRequest" sap:VirtualizedContainerService.HintSize="464,90" OperationName="GetData" ServiceContractName="w:IService">

然而,当我运行此工作流服务时,我得到以下异常:

在服务'Service1'实施的合同列表中找不到合同名称'wfService.IService'。

但是,在幕后创建的服务没有实现IService接口,我想知道如何扩展由工作流引擎实例化的服务来实现我自己的接口(我在上面描述)?

由于

1 个答案:

答案 0 :(得分:3)

在WF4中,您无法在代码中声明ServiceContract并使用它。契约在XAML中声明,WorkflowServiceHost从声明生成终点。

要为您的工作流程服务启用REST,您几乎没有选择:

  1. 使用http://wf.codeplex.com/wikipage?title=WebAPIWorkflow中的HttpWorkflowHost。限制是你只有REST。
  2. 做类似的事情:http://msdn.microsoft.com/en-us/library/aa967564.aspx 区别在于:替换WorkflowFormatterBehavior而不是DataContractSerializerOperationBehavior,从消息合同而不是操作合同中提取参数,并记住您将不具有此示例的客户端部分,并且您必须根据协议格式化响应。