0

私はWF4を初めて使用しています。私がしたいのは、WF4状態マシンをWCFサービスとして公開することです。私は状態マシンを作成しました。遷移トリガを実行し、WCFを使用してステータスを変更するにはどうすればよいですか。 http://channel9.msdn.com/Shows/Workflow-TV/endpointtv-WF4-State-Machine-Hands-On-Lab-Exercise-2。これは私がステートマシンを作成するのに使ったチュートリアルです。WF4状態マシンをWCFサービスとしてホストする方法

答えて

2

私はState Machine Security Doorでこれを行う方法を示すサンプルを書いています。基本的には、トランジションでSend/ReceiveReplyペアを使用します。

+0

ありがとうございました。あなたのサンプルについて質問があります。サービスをWebプロジェクトに組み込む理由はありますか?私たちはwebsinc(http://www.frozenmountain.com/websync/)サーバを使用してSilverlightからサービスを呼び出しています。 –

+0

XAMLXファイルは、Webプロジェクトでホストするか、WorkflowServiceHostでホストすることができます。 –

+0

SilverlightでWFサービスを使用するためにwebsyncのような別のサーバーを使用する必要はありません。助けてくれてありがとう。 –

0

アクティビティを送受信したくない場合は、いくつかの作業で可能です。送信アクティビティと受信アクティビティは、相関関係の処理を行うエンド・ユーザーのために書くのが難しい場合があります。 もう一つの面は、クライアントのための汎用的な入り口があれば、クライアントが更新されたサービス参照を必要とせず、契約定義だけを持つ方が良いでしょう。

すべての相関を削除し、特定のxamlxワークフローにリダイレクトする汎用Webサービスを作成しましたが、送受信アクティビティは使用しませんでした。代わりに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 

これはIworkflowCreation契約を実装WorkflowCreationEndpoint呼ば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); 
} 
関連する問題