注意::我还在:: 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
}
答案 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);