回答

2

我写了一个示例,演示如何在State Machine Security Door做到这一点。基本上你只需在转换中使用Send/ReceiveReply对。

+0

感谢您的指导。我有一个关于你的样本的问题。是否有理由将该服务放入Web项目中?我们使用websinc(http://www.frozenmountain.com/websync/)服务器从silverlight调用服务。 – 2012-02-16 04:56:44

+0

XAMLX文件必须托管在Web项目中,或者您可以使用WorkflowServiceHost自行托管它们。 – 2012-02-23 19:16:10

+0

所以,你所说的是我们不需要像websync那样使用单独的服务器来使用Silverlight的WF服务。谢谢您的帮助。 – 2012-02-23 19:23:56

0

如果妳不想要发送和接收活动的有可能与一些工作。发送和接收活动可能很难写入做相关工作的最终客户。 另一方面,如果客户端有一个通用入口,那么客户端不需要更新服务引用,而只需要一个合同定义就会更好。

我们删除了所有相关和创建一个通用的Web服务是重新路由到特定xamlx工作流程,但不使用发送/接收活动。相反,我们在xamlx工作流程中使用书签。 因此,我们创建了一个自己的活动来接收自定义页面流数据和另一个将数据发送回实例的活动。我们遇到的唯一问题。

public interface IWorkflowService 
{ 
    #region State Machine/Pageflow Operations 

    [OperationContract] 
    IPageflowData Start(IPageflowData pageflowData); 

    [OperationContract(Name = "StartWithInputs")] 
    IPageflowData Start(IPageflowData pageflowData, IDictionary<string, object> inputs); 

    [OperationContract] 
    IPageflowData Resume(PageflowCommand command, IPageflowData pageflowData); 

    [OperationContract(Name = "ResumeWithExecuteCommand")] 
    IPageflowData Resume(string commandName, IPageflowData pageflowData); 

    [OperationContract] 
    IPageflowData ResumeTo(string stepName, IPageflowData pageflowData); 

    #endregion 

这是通过动态端点作为称为WorkflowCreationEndpoint实施IworkflowCreation合同WF样品中可用的组合。

[ServiceContract(Name = "IWorkflowCreation")] 
public interface IWorkflowCreation 
{ 
    [OperationContract(Name = "Create")] 
    Guid Create(IDictionary<string, object> inputs); 

    [OperationContract(Name = "CreateWithInstanceId", IsOneWay = true)] 
    void CreateWithInstanceId(Guid instanceId, IDictionary<string, object> inputs); 

    [OperationContract(Name = "ResumeBookmark")] 
    void ResumeBookmark(Guid instanceId, string bookmarkName, object bookmarkValue); 
}