2012-07-23 1 views
1

Possible en double:
RESTful Workflow Service Endpoints in WF4/WCFWCF Workflow Service Interface REST

Je suis en train de faire de Windows Workflow Services 4.0 travail avec une interface REST. J'ai un service de flux de travail très simple appelé "Service1" avec une activité receiveRequest et sendResponse.

Par défaut, WF Services génère automatiquement les classes et les interfaces implémentées, mais je voudrais forcer le service WF à utiliser ma propre interface REST activée au lieu d'une interface autogénérée interne.

L'interface serait la suivante:

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

Cependant, j'ai difficultés à configurer le XAML pour travailler avec cette interface. je besoin d'une configuration XAML comme celui-ci de préciser que le nom du contrat de service est mon propre contrat:

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

Cependant quand je lance ce service de workflow je reçois l'exception suivante:

Le nom du contrat 'wfService.IService' n'a pas pu être trouvé dans la liste des contrats implémentés par le service 'Service1'.

Cependant, le service qui est créé dans les coulisses ne met pas en oeuvre l'interface IService et je voudrais savoir comment puis-je étendre le service qui obtient instancié par le moteur de workflow pour mettre en œuvre ma propre interface (que je décrit au dessus)?

Merci

+0

Jetez un coup d'œil à @Maurice answer [ici] (http://stackoverflow.com/questions/3678129/restful-workflow-service-endpoints-in-wf4-wcf). –

Répondre

3

En WF4 vous ne pouvez pas déclarer ServiceContract dans le code et l'utiliser. Le contrat est déclaré en XAML et WorkflowServiceHost génère le point de terminaison à partir de la déclaration.

Pour activer REST pour votre workflowservice vous avez quelques options:

  1. Utilisez HttpWorkflowHost de http://wf.codeplex.com/wikipage?title=WebAPIWorkflow. La limitation est que alors vous aurez seulement REST.
  2. Est-ce que quelque chose de similaire à ceci: http://msdn.microsoft.com/en-us/library/aa967564.aspx Les différences sont: REPLACE WorkflowFormatterBehavior au lieu de DataContractSerializerOperationBehavior, les arguments sont extraits du contrat de message au lieu de contrat d'exploitation et garder à l'esprit que vous n'aurez pas partie client de cet exemple et vous devez formater réponse selon le protocole.