5

テンプレート ワークフローの一番上に、同期操作を実行したい場所に ReceiveRequest / SendReply ブロックを配置し、ユーザー クライアントが開始されたワークフローのタイムリーな応答を受信できるようにします。クライアントは、WCF 経由で WF を呼び出します。

クライアントは、アプリケーション データベースのエントリのステータスを使用して、現在のリクエストのステータスを認識しています。

たとえば、注文を作成し、PlaceOrderWF を呼び出し、DB で注文のステータスを「Accepted」に設定します。クライアントは、WF がチェックや制御などを行っている間に、必要なことを何でも実行できます。注文の最終値を「完了」または「エラー」に設定します。

SendResponse ブロックの直後にクライアントが応答を受け取ることを期待しています。実際にはこのようには動作しないようですが、何らかの「イベント」がクライアントを解放するのを待ちます。残念ながら、この動作を引き起こすイベントの証拠はありません。

テストするには、SendResponde アクティビティの後に Delay アクティビティを配置するだけで、私が話している動作を再現できるはずです。

この望ましくないエラーを回避する方法に関するヒントはありますか?

WF テンプレート -- 操作名を意図的に空白のままにしました

4

1 に答える 1

5

ワークフローは続行され、現在のスレッドで可能な限り実行されるため、すぐに呼び出し元に戻ることはありません。ワークフローに短いタイムアウト(たとえば、1秒)の遅延を追加すると、ワークフローをアイドル状態にし、WCF応答をクライアントに送信してから、ワークフローを続行します。

于 2010-11-16T12:36:10.240 に答える