public void Send_Plus128CStoreRequestsCompressedTransferSyntax_NoOverflowContextIdsAllRequestsRecognized(int expected) { var port = Ports.GetNext(); using (DicomServer.Create <SimpleCStoreProvider>(port)) { var actual = 0; var client = new DicomClient(); client.NegotiateAsyncOps(expected, 1); for (var i = 0; i < expected; ++i) { client.AddRequest(new DicomCStoreRequest(@"./Test Data/CT1_J2KI") { OnResponseReceived = (req, res) => Interlocked.Increment(ref actual) }); } var exception = Record.Exception(() => client.Send("127.0.0.1", port, false, "SCU", "ANY-SCP")); Assert.Null(exception); Assert.Equal(expected, actual); } }
public void Send_ToDicomServer_ReturnsSuccess() { Task.Run(() => new DicomServer<DicomCEchoProvider>(104)).Wait(100); var client = new DicomClient(); client.NegotiateAsyncOps(); DicomStatus status = null; var request = new DicomCEchoRequest { OnResponseReceived = (echoRequest, response) => status = response.Status }; client.AddRequest(request); client.Send("localhost", 104, false, "ECHOSCU", "ECHOSCP"); while (status == null) Thread.Sleep(10); Assert.AreEqual(DicomStatus.Success, status); }
public async Task OldDicomClient_SendEchos() { var client = new Dicom.Network.DicomClient(); client.NegotiateAsyncOps(1, 1); client.Linger = 0; var requests = Enumerable.Range(0, 1000).Select(i => new DicomCEchoRequest()); foreach (var request in requests) { client.AddRequest(request); } await client.SendAsync("127.0.0.1", _server.Port, false, "SCU", "ANY-SCP").ConfigureAwait(false); }
public void Send_MultipleRequests_AllRecognized(int expected) { int port = Ports.GetNext(); using (DicomServer.Create<DicomCEchoProvider>(port)) { var actual = 0; var client = new DicomClient(); client.NegotiateAsyncOps(expected, 1); for (var i = 0; i < expected; ++i) client.AddRequest(new DicomCEchoRequest { OnResponseReceived = (req, res) => ++actual }); client.Send("127.0.0.1", port, false, "SCU", "ANY-SCP"); Assert.Equal(expected, actual); } }
public void Send_ToDicomServer_ReturnsSuccess() { Task.Run(() => new DicomServer <DicomCEchoProvider>(104)).Wait(100); var client = new DicomClient(); client.NegotiateAsyncOps(); DicomStatus status = null; var request = new DicomCEchoRequest { OnResponseReceived = (echoRequest, response) => status = response.Status }; client.AddRequest(request); client.Send("localhost", 104, false, "ECHOSCU", "ECHOSCP"); while (status == null) { Thread.Sleep(10); } Assert.AreEqual(DicomStatus.Success, status); }
public void Send_MultipleRequests_AllRecognized(int expected) { int port = Ports.GetNext(); using (DicomServer.Create <DicomCEchoProvider>(port)) { var actual = 0; var client = new DicomClient(); client.NegotiateAsyncOps(expected, 1); for (var i = 0; i < expected; ++i) { client.AddRequest(new DicomCEchoRequest { OnResponseReceived = (req, res) => Interlocked.Increment(ref actual) }); } client.Send("127.0.0.1", port, false, "SCU", "ANY-SCP"); Assert.Equal(expected, actual); } }
private static void Main(string[] args) { try { // Initialize log manager. LogManager.SetImplementation(NLogManager.Instance); DicomException.OnException += delegate(object sender, DicomExceptionEventArgs ea) { ConsoleColor old = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(ea.Exception); Console.ForegroundColor = old; }; var config = new LoggingConfiguration(); var target = new ColoredConsoleTarget(); target.Layout = @"${date:format=HH\:mm\:ss} ${message}"; config.AddTarget("Console", target); config.LoggingRules.Add(new LoggingRule("*", NLog.LogLevel.Debug, target)); NLog.LogManager.Configuration = config; var client = new DicomClient(); client.NegotiateAsyncOps(); for (int i = 0; i < 10; i++) { client.AddRequest(new DicomCEchoRequest()); } client.AddRequest(new DicomCStoreRequest(@"test1.dcm")); client.AddRequest(new DicomCStoreRequest(@"test2.dcm")); client.Send("127.0.0.1", 11112, false, "SCU", "STORESCP"); foreach (DicomPresentationContext ctr in client.AdditionalPresentationContexts) { Console.WriteLine("PresentationContext: " + ctr.AbstractSyntax + " Result: " + ctr.Result); } var samplesDir = Path.Combine( Path.GetPathRoot(Environment.CurrentDirectory), "Development", "fo-dicom-samples"); var testDir = Path.Combine(samplesDir, "Test"); if (!Directory.Exists(testDir)) Directory.CreateDirectory(testDir); //var img = new DicomImage(samplesDir + @"\ClearCanvas\CRStudy\1.3.51.5145.5142.20010109.1105627.1.0.1.dcm"); //img.RenderImage().Save(testDir + @"\test.jpg"); //var df = DicomFile.Open(samplesDir + @"\User Submitted\overlays.dcm"); //Console.WriteLine(df.FileMetaInfo.Get<DicomTransferSyntax>(DicomTag.TransferSyntaxUID).UID.Name); //Console.WriteLine(df.Dataset.Get<PlanarConfiguration>(DicomTag.PlanarConfiguration)); //var img = new DicomImage(df.Dataset); //img.RenderImage().Save(testDir + @"\test.jpg"); //df = df.ChangeTransferSyntax(DicomTransferSyntax.JPEGLSLossless); //df.Save(testDir + @"\test-jls.dcm"); //df = df.ChangeTransferSyntax(DicomTransferSyntax.JPEG2000Lossless); //df.Save(testDir + @"\test-j2k.dcm"); //df = df.ChangeTransferSyntax(DicomTransferSyntax.JPEGProcess14SV1); //df.Save(testDir + @"\test-jll.dcm"); //df = df.ChangeTransferSyntax(DicomTransferSyntax.RLELossless); //df.Save(testDir + @"\test-rle.dcm"); //df = df.ChangeTransferSyntax(DicomTransferSyntax.ExplicitVRLittleEndian); //df.Save(testDir + @"\test-ele.dcm"); //df = df.ChangeTransferSyntax(DicomTransferSyntax.ExplicitVRBigEndian); //df.Save(testDir + @"\test-ebe.dcm"); //df = df.ChangeTransferSyntax(DicomTransferSyntax.ImplicitVRLittleEndian); //df.Save(testDir + @"\test-ile.dcm"); //Console.WriteLine("End..."); //Console.ReadLine(); //df.WriteToLog(LogManager.GetCurrentClassLogger(), LogLevel.Info); //Console.WriteLine(DicomValueMultiplicity.Parse("1")); //Console.WriteLine(DicomValueMultiplicity.Parse("3")); //Console.WriteLine(DicomValueMultiplicity.Parse("1-3")); //Console.WriteLine(DicomValueMultiplicity.Parse("1-n")); //Console.WriteLine(DicomValueMultiplicity.Parse("2-2n")); //Console.WriteLine(DicomTag.Parse("00200020")); //Console.WriteLine(DicomTag.Parse("0008,0040")); //Console.WriteLine(DicomTag.Parse("(3000,0012)")); //Console.WriteLine(DicomTag.Parse("2000,2000:TEST CREATOR")); //Console.WriteLine(DicomTag.Parse("(4000,4000:TEST_CREATOR:2)")); //Console.WriteLine(DicomMaskedTag.Parse("(30xx,xx90)")); //Console.WriteLine(DicomMaskedTag.Parse("(3000-3021,0016)")); //DicomRange<DateTime> r = new DicomRange<DateTime>(DateTime.Now.AddSeconds(-5), DateTime.Now.AddSeconds(5)); //Console.WriteLine(r.Contains(DateTime.Now)); //Console.WriteLine(r.Contains(DateTime.Today)); //Console.WriteLine(r.Contains(DateTime.Now.AddSeconds(60))); //DicomDictionary dict = new DicomDictionary(); //dict.Load(@"F:\Development\fo-dicom\DICOM\Dictionaries\dictionary.xml", DicomDictionaryFormat.XML); //string output = Dicom.Generators.DicomTagGenerator.Generate("Dicom", "DicomTag", dict); //File.WriteAllText(@"F:\Development\fo-dicom\DICOM\DicomTagGenerated.cs", output); //output = Dicom.Generators.DicomDictionaryGenerator.Generate("Dicom", "DicomDictionary", "LoadInternalDictionary", dict); //File.WriteAllText(@"F:\Development\fo-dicom\DICOM\DicomDictionaryGenerated.cs", output); //string output = Dicom.Generators.DicomUIDGenerator.Process(@"F:\Development\fo-dicom\DICOM\Dictionaries\dictionary.xml"); //File.WriteAllText(@"F:\Development\fo-dicom\DICOM\DicomUIDGenerated.cs", output); } catch (Exception e) { if (!(e is DicomException)) Console.WriteLine(e.ToString()); } }
static void Main(string[] args) { //开启C-STORE SCP服务,用于接收C-MOVE SCP返回的图像 CStoreSCP.OnCStoreRequestCallBack = (request) => { var studyUid = request.Dataset.Get<string>(DicomTag.StudyInstanceUID); var instUid = request.SOPInstanceUID.UID; var path = Path.GetFullPath(@"c:\cmove-scu"); path = Path.Combine(path, studyUid); if (!Directory.Exists(path)) Directory.CreateDirectory(path); path = Path.Combine(path, instUid) + ".dcm"; request.File.Save(path); return new DicomCStoreResponse(request, DicomStatus.Success); }; var cstoreServer = new DicomServer<CStoreSCP>(22345); //发起C-MOVE-RQ操作,发送请求的StudyID是12 DicomCMoveRequest req=new DicomCMoveRequest("DEST-AE","12"); var client=new DicomClient(); client.NegotiateAsyncOps(); client.AddRequest(req); //这里的IP地址是C-MOVE SCP的地址,12345端口号是C-MOVE SCP提供C-MOVE服务的端口 //在C-MOVE SCP端发出的C-STORE-RQ子操作请求的是C-MOVE SCU端我们实现的C-STORE SCP,C-STORE SCP绑定的端口是22345 client.Send("127.0.0.1", 12345,false, "DEST-AE", "SCP-AE"); Console.ReadLine(); }