2

注意::我也在 Clearcanvas 论坛上问过这个问题:http: //www.clearcanvas.ca/dnn/tabid/69/afv/topic/aff/11/aft/15086/Default.aspx

嗨,我正在 WPF 中制作自己的 ImageViewer,现在需要使用 ImageServer 加载 DICOM 文件。我没有使用工作站作为起点,而是使用 (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 的 DICOM C-FIND 请求来检索 ImageServer 上的研究列表。然后,您需要选择一个特定的研究并发出 DICOM C-MOVE 请求以将该研究移动到您的应用程序中。另请注意,您将需要一个 DICOM Storage SCP 应用程序来侦听传入的 DICOM 关联,​​并且您的应用程序必须配置为 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 类。首先确保在 Admin/Configure/Devices 下的 ImageServer 中将 Device 端口配置为 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 回答