シナリオ:制限クライアントの知識ワークフロー
.NET下- Windowsワークフロー財団(WF)複数
- が同じパラメータでの操作、すべての受信WCFサービスとして展開4
- ワークフロー
- 操作名がアクティビティ名と一致する
- SQL Serverワークフローの永続性を使用する
- (SharePointなし)
デフォルトでは、サービス参照を追加してプロキシを生成すると、ワークフローの知識がクライアントに組み込まれます。クライアントは、利用可能なWCFメソッドを知っています。
私はクライアントからワークフローを切り離し、本質的に特定の規則に一致するワークフローで動作する「汎用」クライアントを作成したいと考えています。クライアントはSQLインスタンスストアに問い合わせて、指定されたインスタンスが待機していたアクティビティ/操作/ブックマーク(これは既に標準列ActiveBookmarks)を確認し、その選択肢をユーザーに提示します。
このようにして、クライアントを再コンパイル/再デプロイする必要なくワークフローを変更できます。いくつかの商用BPMシステムがこのように機能します。新しいヒューマン・クライアント・アクティビティーを追加することができ、それらはクライアントの作業キューに自動的に表示されます。すべてが動的に検出可能です。
どうすればいいですか?プロキシを生成するためにReflection.Emitを使用する必要がありますか?各操作で異なるサービス契約が使用された方が簡単でしょうか?
これは、依然としてクライアント上のワークフローの詳細な知識を必要としているようです。私が知っているのは、 "[OrderEntry | {http://www.myurl.com/} IOrderEntryService:InternalReceiveMessage]"という文字列(InstanceStoreデータベースのInstances.ActiveBookmarks)とURLです。私は、操作が文字列パラメータを取り、voidを返すという慣例を確立しましたが、どの操作が事前に利用可能であるかはわかりません。別の開発者は、新しいOrderReview操作でワークフローを再デプロイすることができ、クライアントアプリケーションはそれを動的に検出して呼び出す必要があります。 – TrueWill
このブログの投稿の2番目の部分をご覧くださいhttp://msmvps.com/blogs/theproblemsolver/archive/2010/11/23/calling-workflow-services-without-add-service-reference.aspx。これは、普遍的なWCF契約と低レベルのメッセージングで同じことを説明しています。メッセージがどのように見えるか、URLを知っている限り、送信することができます。 – Maurice
私はこれを使用したとき、SQL Serverのテーブルを作成し、パラメータや戻り値などのさまざまなメッセージを作成するために必要なすべての操作の詳細を作成しました。 – Maurice