[Updated 24 March 2023, fix links]
Following are some highlights of the major improvements in this release.
Multi-Threading
DICOM Server Applications are usually required to handled multiple concurrent associations. Release 1.0.0.4 includes Multi-Threaded sample applications both in C# and in C++.
At first glance the multi-threading model that we chose might look a bit strange because the application event loop is actually handled in the worker thread (See for example MultithreadedServerExample AssocHandler DoWork). This paradigm was chosen because of some limitations that COM and .NET interop enforce with MTA's.
Error Handling
Release 1.0.0.4 of RZDCX provides detailed log descriptions using the COM Error Handling framework.
When adding the error handling framework, we tried to provide the most accurate error text that can be presented to the user. Since RZDCX exposes a very High Level Programming API, every API call encapsulates many DICOM primitives and therefore we had to choose the correct message to show.
The error text is aimed to provide good diagnostics information. This means for example that if a file failed to send then the error will be of the send failure even if there were also problems in the association release command.
In C++ Use the _com_error::Description() method to get the error message.
In C# use the System.Runtime.InteropServices.COMException Message property to the error message.
Backwords Competibility of release 1.0.0.4
In release 1.0.0.3 the dictionary method LookupTagByName was part of the Requester class (DCXREQ). In release 1.0.0.4 we've added a new Dictionary class (DCXDIC) that handles the task of tag names and numbers look-ups.
Migration to Visual Studio 2008
Release 1.0.0.4 was built using Visual Studio 2008. The DLL however is statically linked (what makes it a bit big) so there should not be any dependency problems.
Bug Fixes
Ticket 20: RZDCX MovePatient negotiates wrong SOP Class
Negotiates Study Root Move but tries to move on Patient Root.
Ticket 22: DCXACC Creates temporary file even if user provided a name
The call to the user callback should be before creating the temporary file and not after. Otherwise if the user provides a name, two files are created: the temp one and the user one and the temp one is left empty.
Known problem - Exception thrown in C++ Server Test Apps
ReplyDeleteWhen running the debug version of the C++ Server Test Applications (CPPMultithreadedServerExample and CPPStorageSCPExample) an exception is thrown right at the beginning of the application before even getting into the main function.
This exception does not prevent the application from running but is not very nice.
We are working to fix this problem.