2

注:: Clearcanvas フォーラムでもこの質問をしました:: http://www.clearcanvas.ca/dnn/tabid/69/afv/topic/aff/11/aft/15086/Default.aspx

こんにちは、私は WPF で独自の ImageViewer を作成しており、ImageServer で DICOM ファイルをロードする必要があります。私は Workstation を出発点として使用していません。(ClearCanvas.Dicom.dll) を使用してゼロからビューアを作成しています。テスト用にコンピューターに ImageServer をセットアップしましたが、ワークステーション アプリでは接続できますが、アプリでは接続できません (これが私の問題です)。

以下のコードを使用して ImageServer に接続しようとすると、接続がタイムアウトします。Workstation アプリを使用して ImageServer に接続できます。接続文字列を構成する方法がわかりません。

{
    EndpointAddress endpoint = new EndpointAddress("http://localhost:104/ClearCanvas/ImageViewer/Automation?wsdl");
    StudyRootQueryServiceClient client = new StudyRootQueryServiceClient(binding, endpoint);
    client.Open();    
}

ワークステーションで接続するために使用する設定は次のとおりです。これを接続文字列に変換するにはどうすればよいですか??

{
    Server Name= ImageServer
    Host= localhost
    AE Title= SERVERAE
    Port= 104
}
4

2 に答える 2

3

DICOM経由でImageServerから画像をロードしたいと思うでしょう。これには、ImageServer 上のスタディのリストを取得するために、ImageServer に対する DICOM C-FIND 要求が必要になります。次に、特定のスタディを選択し、DICOM C-MOVE リクエストを発行してスタディをアプリケーションに移動する必要があります。また、着信 DICOM アソシエーションをリッスンするには DICOM Storage SCP アプリケーションが必要であり、アプリケーションは ImageServer 上のデバイスとして構成する必要があることに注意してください。

ClearCanvas DICOM ライブラリを使用して C-FIND リクエストを発行するには、次のコードを使用できます。


StudyRootFindScu findScu = new StudyRootFindScu();
StudyQueryIod queryMessage = new StudyQueryIod();
queryMessage.QueryRetrieveLevel = QueryRetrieveLevel.Study;
queryMessage.SetCommonTags();

IList results = findScu.Find("LocalAETitle", "SERVERAE", "localhost", 104, queryMessage);

foreach (StudyQueryIod item in results)
{
    string AccessionNumber = item.AccessionNumber;
    string PatientID = item.PatientId;
    string Sex = item.PatientsSex;
    DateTime BirthDate = item.PatientsBirthDate;
    string StudyName = item.StudyDescription;
    string PatientName = item.PatientsName;
    string StudyUID = item.StudyInstanceUid;
    DateTime StudyDate = item.StudyDate.Value;
    string Modality = item.Modality;
    string ReferringPhysiciansName = item.ReferringPhysiciansName;
}


クエリを「フィルタリング」する場合は、queryMessage で一致する追加のタグを設定できることに注意してください。

結果からスタディを選択したら、DICOM C-MOVE リクエストを発行するには、次のコードを使用できます。


string studyInstanceUid = "1.1.1."; // Fill in with the real Study Instance UID
ClearCanvas.Dicom.Network.Scu.MoveScuBase moveScu = new ClearCanvas.Dicom.Network.Scu.StudyRootMoveScu("LocalAETitle", "SERVERAE", "localhost", 104, "LocalAETitle");
moveScu.AddStudyInstanceUid(studyInstanceUid);
moveScu.Move();

最後に、ClearCanvas ソースには Storage SCP 実装があります。Trunk\Dicom\Samples\StorageScp.cs のファイルを確認することをお勧めします。これを実装するには、かなりの量の余分なコードが必要です。

于 2011-01-28T20:17:07.570 に答える
1

これは他の人のためのメモ/情報です::

「Steve Wranovsky」が述べたように、clearcanvas src の StarageScp.cs を見てください。そこには、ImageServer からファイルを取得するために使用した StorageScp クラスがあります。最初に、ImageServer の Admin/Configure/Devices でデバイス ポートを 106 か何かに設定してください。

次に、これが StorageScp クラスを開始してポートでリッスンする方法です。

StorageScp.StorageLocation = @"C:\Users\USER\Downloads\DICOM\ScpTEST";
StorageScp.StartListening("LocalAETitle", 106);
while(!StorageScp.Started) System.Threading.Thread.Sleep(10);

アプリを閉じるときは、忘れずにリスニングを停止してください。

StorageScp.StopListening(106);

次に、StorageScp クラスがリッスンしている間に、C-Move 呼び出しを行って DICOM ファイルを受信します。

MoveScuBase moveScu = new StudyRootMoveScu("LocalAETitle", "SERVERAE", "localhost", 104, "LocalAETitle");
moveScu.AddStudyInstanceUid(StudyUID);
moveScu.Move();

また、ファイルを ImageServer に送信する場合は、StorageScu.cs を見て、クラスを使用するには、次のようにします...

StorageScu scu = new StorageScu();
scu.AddFileToSend(d.FileName);
scu.Send("LocalAETitle", "SERVERAE", "localhost", 104);
于 2011-01-31T17:53:57.540 に答える