単純なワークフロー サービス アプリ (WF1) を作成し、別のワークフロー アクティビティ (WF2) を含むソリューションに Windows フォーム クライアントを追加しました。次に、適切なサービス参照を WF1 に追加しました。サービス参照を使用して WF2 (Windows フォーム) から WF1 (ワークフロー サービス アプリ) へのメッセージ呼び出しを追加しようとすると、ツールボックスにサービス参照 WF1 を表す項目がありません。欠落しています。追加しようとしてもうまくいきません...迷っています。何か案は?
1 に答える
ビデオを見た後、上記の 2 番目のコメントに基づいて、ビデオが示しているのと同じように、WorkflowService を他のワークフロー内のアクティビティとして使用する必要はないと思います。ビデオでは、彼はサービス操作の 1 つだけを呼び出していることに注意してください。ワークフロー コンソール テンプレート プロジェクトを使用すると、操作をアクティビティにラップすることで簡単な方法でサービス操作を呼び出すことができるため、プロキシ クライアントをインスタンス化する必要がなくなります。同じ結果を達成する他の方法があります。
私なら何をしますか: WinForms クライアントの Service Reference を WorkflowServiceApp WF1 に追加します (これは既に実行済みです)。2 番目のワークフロー (WF2) 内で、WF1 のタイプのプロキシをインスタンス化し、サービスが公開する操作を直接呼び出します。これは、ワークフロー内にない場合に通常のサービス操作を呼び出す場合と同じです。基本的に、WCF サービスを使用しています。1 つのオプションは、サービスの型の変数を作成し、Assign アクティビティなどで新しい参照をインスタンス化し、サービスの結果の型の変数を作成し、最後にサービスを呼び出すことです。他の Assign または InvokeMethod アクティビティで。
最初の割り当てアクティビティ:
proxy = New WF1Client() //That has to be the name of you client as created by the Service Reference
2 番目の Assign アクティビティ:
Result = proxy.MyMethod(...) //The call to the operation. You would have to create the variables to hold the result and any input parameters you wish to pass to the operation.
それは簡単です。サービス自体をアクティビティとして使用する必要はありません。
デザイナー内で使用する、または他のワークフロー間で共有する単一のアクティビティにする必要がある場合は、コード アクティビティを作成し、その中でサービス操作を呼び出し (プロキシのインスタンス化、入力の設定など)、コンパイルしてコードを作成します。アクティビティがツールボックスに表示されるので、WF2 で使用できます。さらに、ClassLibrary を作成し、WF に付属するアクティビティまたはそこにカスタム アクティビティを実装すると、ClassLibrary を参照することで、さまざまなワークフロー プロジェクトでそれらを再利用できます。WF1 の開発を管理できる場合は、このアプローチを使用してアクティビティを再利用できます。
お役に立てれば。