DICOM ルータ・プロダクションのサンプル
同期ルータと非同期ルータのデモを行う 2 つのサンプル・プロダクションがあります。これらの名前は Demo.DICOM.Production.Router と Demo.DICOM.Production.AsyncRouter です。これらのプロダクションは、ユーザが DICOM ドキュメントをルーティングする方法を示します。通常、DICOM は同期メッセージングを使用しますが、非同期ルータを使用すると効果的な場合もあります。
同期 DICOM ルータ
同期 DICOM ルータ・プロダクション Demo.DICOM.Production.Router は、ターゲットへのメッセージの送信を完了してから、別のメッセージを受信できます。このルータ・プロダクションにおけるメッセージのフローは次のとおりです。
-
リモートのサービス・クラス・ユーザ (SCU) はリスナ・サービスに接続し、メッセージを送信します。
-
リスナ・サービスは、メッセージを受信すると、メッセージをディスパッチャに送信します。
-
ディスパッチャはメッセージをそれぞれのファイラに送信します。このサンプル・プロダクションには 2 つのファイラがあります。
-
それぞれのファイラがメッセージをオペレーションに送信すると、オペレーションによって、適切な PACS システムとの関連付けが確立され、ドキュメントがそのシステムに送信されます。
-
ディスパッチャは、それぞれのオペレーションから成功応答を受信すると、成功応答メッセージをリスナに送信します。その後、リスナは新しいメッセージを受け取ることができるようになります。
非同期 DICOM ルータ
非同期 DICOM メッセージ・リスナは、プロダクションが前のメッセージを処理している間も継続的にメッセージを受信できます。AsyncRouter プロダクションにおけるメッセージのフローは次のとおりです。
-
リモートのサービス・クラス・ユーザ (SCU) はリスナ・サービスに接続し、メッセージの送信を開始します。
-
リスナ・サービスは、メッセージを受信すると、すぐに C-STORE-RSP で応答し、そのメッセージを処理する役割を引き受けます。リスナ・サービスはメッセージを AsyncDispatcher に送信します。
-
AsyncDispatcher プロセスは、それぞれのファイラについてテーブル Demo_DICOM.BatchedDocument のエントリをキューに入れます。このサンプル・プロダクションには、AsyncFiler1 と AsyncFiler2 という 2 つのファイラがあります。ルール・クラス SendToTargetFiler メソッドを使用して、ドキュメントをそれぞれのファイラに送信するかどうかが決定されます。
-
リモート SCU とリスナ・サービスの間の関連付けが解放されたら、AsyncDispatcher は、そのセッション内でキューに入れられているドキュメントがあるそれぞれのファイラにメッセージを送信します。
-
それぞれのファイラがメッセージをオペレーションに送信すると、オペレーションによって、適切な PACS システムとの関連付けが確立され、それぞれのドキュメントがそのシステムに送信されます。
-
プロダクションは、C-STORE-RSP 応答を受信すると、Demo_DICOM.BatchedDocument テーブルのエントリを "Delivered" (ステータスが成功の場合) または "Errored" (それ以外の場合) の DocumentStatus でマークします。"Errored" の場合は、ErrorComment がエントリの備考として格納されます。
-
ファイラの [完了したエントリを削除] 設定にチェックが付いている場合、ファイラは、C-STORE-RSP メッセージをすべて受信すると、現行セッション内の送信済みエントリをすべて削除します。 ただし、リモート SCP が ABORT を返した場合、または現行セッションにおけるファイラのすべてのドキュメントが送信される前に関連付けでエラーが発生した場合、ファイラは、すべてのドキュメントが正常に送信されるか、指定された再試行回数に達するまで、現行セッション内のすべてのドキュメントを再送信します。 指定された再試行回数に達しても、正常に送信されていないドキュメントがある場合、ファイラは、現行セッション内のすべてのドキュメントを再度キューに入れ、アラートを発行します。アラート・メッセージは Ens.Alert に送信され、Ens.Alert によって電子メール・アラートが送信されます。