ImageServer“EndpointAddress”的Clearcanvas连接字符串

时间:2011-01-26 20:27:10

标签: image dicom clearcanvas

注意::我还在:: http://www.clearcanvas.ca/dnn/tabid/69/afv/topic/aff/11/aft/15086/Default.aspx

的Clearcanvas论坛上提出了这个问题

嗨,我正在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();    
}

以下是我在Workstation中用来连接的设置,那么如何将其转换为连接字符串?

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

2 个答案:

答案 0 :(得分: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中设置其他标记以匹配。

从resuts中选择一项研究后,发出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中查看该文件。这需要相当多的额外代码来实现。

答案 1 :(得分:1)

这是其他人的注释/信息::

正如“Steve Wranovsky”所述,请看一下clearcanvas src中的StarageScp.cs。在那里,您将找到我已成功用于完成从ImageServer检索文件的StorageScp类。 首先确保将AdminServer / Configure / Devices下的ImageServer中的设备端口配置为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);

然后,您只需进行C-Move调用即可在StorageScp类正在侦听时接收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);