WorkflowserviceHostでワークフローをホストします
-
27-09-2019 - |
質問
わかりましたので、私はこれに誤ってアプローチしているかもしれませんが、本質的には4.0で新しいWFサービスでプレイして、WFサービスをホストするWindowsサービスを構築しようとしています。現時点では、クライアント(Simple Activity XAMLを含む)とサービス(XAMLXファイルに実装されたWFサービス)プロジェクトを作成しました。
私はそれぞれにシンプルな「Hello Worlds」を試しました。クライアントはaでホストされています WorkflowApplication
そして、最初にサービスをデフォルトのWFサービスプロジェクトテンプレートとしてセットアップしました。どちらも大丈夫だと思われます。
IISなしでサービスをホストしたいので、当然のことながら次の試みは私のサービスをホストすることでした WorkflowServiceHost
. 。これを行うことができます XamlServices.Load()
そして、それが返すオブジェクトをに渡します WorkflowServiceHost
エンドポイントのURIとともにコンストラクター。私は心配していた Run()
にあるようなメンバーメソッドがあります WorkflowApplication
クラス。私はそれを想定しました Open()
メソッドは、サービスホストオブジェクトをサービスとして開き、ワークフローのインスタンスを開始しますが、それを示すものはありません。
最初は、サービスワークフローをセットアップして、テキストファイルが開始されたときに単純に書き込みますが、何も起こりませんでした。ブレークポイントでデバッグしようとしましたが、実行時にXAMLXファイルをロードしているため、WFをデバッグすることはできません。だから私はクライアントプロジェクトを少し変更してみました WorkflowServiceHost
aの代わりに WorkflowApplication
. 。 Hello Worldスタイルのワークフローをテストするために使用されたのと同じワークフローを使用しましたが、今回はコンソールと WorkflowApplication
以前はそれで成功しました。
コンソールプロジェクトでワークフローサービスをホストするためにクライアントで行ったことの基本は次のとおりです。ワークフローのXAMLを見たい場合は、私に知らせてください。この質問を更新します。これがホスティングコードです Main()
.
const String clientAddress = "http://localhost:9998/Client";
WorkflowServiceHost wfHost = new WorkflowServiceHost( new ClientWf(), new Uri(clientAddress) );
wfHost.Open();
while( Console.ReadKey().KeyChar.ToString().ToUpper() != "X" ) { }
wfHost.Close();
解決
私が見つけたのは、あなたがラップされているWFインスタンスを直接開始できないので、 WorkflowServiceHost
オブジェクト、それを実行するのは少し苦痛であり、で達成できるように簡単なメソッド呼び出しによってはほとんど不可能です WorkflowApplication
. 。 WFの火をつけるには「トリック」がありますが、この時点で時間を与えていないハッキングが少しあります。 MSDNには、このシナリオでできることのあいまいな参照があります ここ, 、 下 非サービスワークフローをホストします.
これは、私が行ったソリューションです。WorkflowserviceHostとWorkflowApplicationの両方を使用しています。なぜ聞くの?まあ、私は1つの小さな小さなパッケージですべての多くをやろうとしていたからです。また、これを自分の作業のカスタムサービスモデルとして構築しており、ビジネスロジック(ワークフローアプリケーション)をすべての通信実装(WorkflowserviceHost)から分離する方が良いです。もちろん今、私の根底にある通信があるので、サービスはこのように順調です。ワークフローは受信アクティビティから始まり、ワークフローズホストは、インスタンスを開始するために、関連するワークフローのルートで何らかのタイプのメッセージングアクティビティを探します。
今、私は幸せなキャンピングカーです。私のビジネスロジックは、予想どおりに行うことになっていることを行い、ワークフローサービスはうまく肉付けされています。さらに良いのは、ビジネスロジックを動的にドロップしてカスタムデータ処理/クランチサービスを動的にセットアップおよび展開できるモデルがあることです。今、完璧なコールバックを使用するために、リモートの「ダッシュボード」を日付にするために、それが私が次に進んでいるものです。