Windows Workflow State Machine (.NET 4.5) の使用を検討していますが、方向性が必要です。
電話用のステート マシンを備えた WCF サービスがあります。状態が次のとおりであるとしましょう。
- 初期化済み
- リンギング
- 接続済み
- 忙しい
- 無回答
- 切断されました
可能な遷移は次のとおりです。
- 電話
- 接続
- 忙しい
- 無回答
- 切断する
このサービスは、呼び出し ID とイベント (「呼び出し」、「接続」、「切断」など) で呼び出されるメソッドを公開します。その呼び出し ID に対応する特定のステート マシン インスタンスをロードし、イベントを渡して、次の状態に移動できるようにする必要があります (または、現在の状態からの対応する遷移がない場合は状態を変更しません)。
たとえば、ステート マシンが Ringing 状態で「connect」を取得した場合、状態を Connected に移行したいのですが、「busy」になった場合は Busy 状態に移行します。ただし、「切断」イベントを取得した場合、ステート マシンは Ringing ステートのままにする必要があります。
ステートレスでこれを成功させましたが、Windows ワークフローで試してみたいと思います。
MSDN の例では、ステート マシンが外部のイベントによって駆動されることは実際には示されていません。
1) ステート マシンの状態に関係なく、ステート マシンに遷移を送信する良い方法は何ですか? 2) ある種の ID を指定して、特定のステート マシン インスタンス (つまり、状態と変数) をデータベース (必ずしも SQL Server ではない) にロード/保存する良い方法は何ですか?