1

可能重复:
WF4/WCF 中的 RESTful 工作流服务端点

我正在尝试使 Windows Workflow Services 4.0 与 REST 接口一起工作。我有一个非常简单的工作流服务,名为“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 接口,我想知道如何扩展工作流引擎实例化的服务以实现我自己的接口(我在上面描述过)?

谢谢

4

1 回答 1

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,参数是从消息合同而不是操作合同中提取的,请记住,您将没有此示例的客户端部分,您必须根据协议格式化响应。
于 2012-08-11T16:12:07.890 回答