2

わかりました。これに間違ってアプローチしている可能性がありますが、基本的には、4.0で新しいWFサービスを試して、WFサービスをホストするWindowsサービスを構築しようとしています。現時点では、クライアント(単純なアクティビティXAMLを含む)およびサービス(XAMLXファイルに実装されたWFサービス)プロジェクトを構築しました。

それぞれに簡単な「HelloWorlds」を試してみました。クライアントはでホストされており、WorkflowApplication最初にサービスをデフォルトのWFサービスプロジェクトテンプレートとして設定しました。どちらも問題ないようです。

IISなしでサービスをホストしたいので、当然、次の試みはでサービスをホストすることでしたWorkflowServiceHost。これを行うことで、エンドポイントのURIとともに、XamlServices.Load()返されるオブジェクトを使用してコンストラクターに渡すことができます。クラスにあるようなメンバーメソッドWorkflowServiceHostがないので心配でした。このメソッドはサービスホストオブジェクトをサービスとして開き、ワークフローのインスタンスを開始すると想定しましたが、その兆候はありません。Run()WorkflowApplicationOpen()

最初は、開始時にテキストファイルに書き込むようにサービスワークフローを設定しましたが、何も起こりませんでした。ブレークポイントを使用してデバッグしようとしましたが、実行時にXAMLXファイルをロードしているため、VSではWFをデバッグできません。そこで、クライアントプロジェクトを少し変更して、のWorkflowServiceHost代わりにを使用してみました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();
4

1 に答える 1

2

私が見つけたのは、WorkflowServiceHostオブジェクトによってラップされたWFインスタンスを直接開始できないため、それを実行するのは少し面倒であり、で実行できるような単純なメソッド呼び出しではほとんど不可能であるということWorkflowApplicationです。WFを起動するための「トリック」がありますが、この時点で私が時間を割いていないハッキングが少しかかります。MSDNには、このシナリオで何ができるかについてのあいまいなリファレンスがあります

これは私が行ったソリューションです:WorkflowServiceHostとWorkflowApplicationの両方を使用します。なぜ聞くの?なぜなら、私はすべてを1つの小さなパッケージで実行しようとしていたからです。また、これを自分の作業のカスタムサービスモデルとして構築しているので、ビジネスロジック(WorkflowApplication)をすべての通信実装(WorkflowServiceHost)から分離することをお勧めします。もちろん、今では私の基礎となる通信のため、サービスはこの方法で問題なく起動します。ワークフローは受信アクティビティで始まり、WorkflowSericeHostsは、インスタンスを開始するために、関連付けられたワークフローのルートである種のメッセージングアクティビティを探します。

今、私は幸せなキャンピングカーです。私のビジネスロジックは期待どおりに機能し、ワークフローサービスはうまく機能しています。さらに優れているのは、ビジネスロジックを動的にドロップして、カスタムデータ処理/クランチサービスを動的にセットアップおよび展開できるモデルがあることです。今度は、リモートの「ダッシュボード」を更新するためにコールバックを完全に行うために、それが次に進みます。

于 2010-05-24T12:40:46.833 に答える