本文整理汇总了C#中ClearCanvas.Dicom.Network.DicomServer.SendCMoveResponse方法的典型用法代码示例。如果您正苦于以下问题:C# DicomServer.SendCMoveResponse方法的具体用法?C# DicomServer.SendCMoveResponse怎么用?C# DicomServer.SendCMoveResponse使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ClearCanvas.Dicom.Network.DicomServer
的用法示例。
在下文中一共展示了DicomServer.SendCMoveResponse方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OnReceiveRequest
/// <summary>
/// Main routine for processing C-MOVE-RQ messages. Called by the <see cref="DicomScp{DicomScpParameters}"/> component.
/// </summary>
/// <param name="server"></param>
/// <param name="association"></param>
/// <param name="presentationId"></param>
/// <param name="message"></param>
/// <returns></returns>
public override bool OnReceiveRequest(DicomServer server, ServerAssociationParameters association, byte presentationId, DicomMessage message)
{
bool finalResponseSent = false;
string errorComment;
try
{
// Check for a Cancel message, and cancel the SCU.
if (message.CommandField == DicomCommandField.CCancelRequest)
{
if (_theScu != null)
{
_theScu.Cancel();
}
return true;
}
// Get the level of the Move.
String level = message.DataSet[DicomTags.QueryRetrieveLevel].GetString(0, "");
// Trim the remote AE, see extra spaces at the end before which has caused problems
string remoteAe = message.MoveDestination.Trim();
// Open a DB Connection
using (IReadContext read = _store.OpenReadContext())
{
// Load remote device information fromt he database.
Device device = LoadRemoteHost(read, Partition, remoteAe);
if (device == null)
{
errorComment = string.Format(
"Unknown move destination \"{0}\", failing C-MOVE-RQ from {1} to {2}",
remoteAe, association.CallingAE, association.CalledAE);
Platform.Log(LogLevel.Error, errorComment);
server.SendCMoveResponse(presentationId, message.MessageId, new DicomMessage(),
DicomStatuses.QueryRetrieveMoveDestinationUnknown, errorComment);
finalResponseSent = true;
return true;
}
// If the remote node is a DHCP node, use its IP address from the connection information, else
// use what is configured. Always use the configured port.
if (device.Dhcp)
device.IpAddress = association.RemoteEndPoint.Address.ToString();
// Now setup the StorageSCU component
_theScu = new ImageServerStorageScu(Partition, device,
association.CallingAE, message.MessageId);
// Now create the list of SOPs to send
bool bOnline;
if (level.Equals("PATIENT"))
{
bOnline = GetSopListForPatient(read, message, out errorComment);
}
else if (level.Equals("STUDY"))
{
bOnline = GetSopListForStudy(message, out errorComment);
}
else if (level.Equals("SERIES"))
{
bOnline = GetSopListForSeries(read, message, out errorComment);
}
else if (level.Equals("IMAGE"))
{
bOnline = GetSopListForSop(message, out errorComment);
}
else
{
errorComment = string.Format("Unexpected Study Root Move Query/Retrieve level: {0}", level);
Platform.Log(LogLevel.Error, errorComment);
server.SendCMoveResponse(presentationId, message.MessageId, new DicomMessage(),
DicomStatuses.QueryRetrieveIdentifierDoesNotMatchSOPClass,
errorComment);
finalResponseSent = true;
return true;
}
// Could not find an online/readable location for the requested objects to move.
// Note that if the C-MOVE-RQ included a list of study instance uids, and some
// were online and some offline, we don't fail now (ie, the check on the Count)
if (!bOnline && _theScu.StorageInstanceList.Count == 0)
{
Platform.Log(LogLevel.Error, "Unable to find online storage location for C-MOVE-RQ: {0}", errorComment);
server.SendCMoveResponse(presentationId, message.MessageId, new DicomMessage(),
DicomStatuses.QueryRetrieveUnableToPerformSuboperations,
string.IsNullOrEmpty(errorComment) ? string.Empty : errorComment);
finalResponseSent = true;
//.........这里部分代码省略.........