LEADTOOLS Medical

フレームを表示
  1. Visual Studio 2005を開始します。
  2. メニューからファイル->新規作成->プロジェクトを選択します。
  3. [新しいプロジェクト]ダイアログボックスの[プロジェクトの種類]リストから[Visual C#]または[Visual Basic]を選択し、[テンプレート]リストで[クラスライブラリ]を選択します。
  4. [プロジェクト名]フィールドに「サンプル保存委託」と入力して、[OK]をクリックします必要であれば、プロジェクトの新しい場所を入力するか、ブラウズボタンを用いてディレクトリを選択します、そして、OKを選択します。
  5. 「ソリューションエクスプローラー」ウィンドウでは、「参照」フォルダを右クリックします、そして、コンテキストメニューから「参照の追加...」を選択します。「参照の追加」ダイアログボックスでは、「閲覧」タブを選択して、.NET「C:\LEADTOOLS 19\Bin\Dotnet\Win32」フォルダのためにLeadtoolsに閲覧して、以下のDLLSを選択します:
    • Leadtools.dllLeadtools.Dicom.dll
    • Leadtools.Dicom.AddIn.dll
    • Microsoft.Practices.Unity

    以下の.NETシステムDLLを追加します:

    System.Core(.NET 3.5 dll)
  6. [OK]をリックして上記のDLLをアプリケーションに追加します。
  7. [ソリューションエクスプローラ]ウィンドウで[Class1.cs]を右クリックし、コンテキストメニューから[名前の変更]をクリックします。「StorageCommitAddIn.cs」と入力して[Enter]キーを押します。
  8. StorageCommitAddIn.csファイルを開き、以下のusingステートメントを追加します。

    [C#]

    
                 using Leadtools.Dicom;
                 using Leadtools.Dicom.AddIn;
                 using Leadtools.Dicom.AddIn.Interfaces;
                 using Leadtools.Dicom.AddIn.Attributes;
                 using Microsoft.Practices.Unity;
                 
    
  9. StorageCommitAddInクラス導出リストに、IProcessNActionを追加します。クラスは、以下のように見えなければなりません:

    [C#]

    
                 public class StorageCommitAddIn : IProcessNAction 
                 {
                 }
                 
    
  10. クラス宣言にDicomAddInAttributeを追加します。これは、サービスにクラスがDicomメッセージを処理するということを知らせます。属性を追加した後に、クラスは以下の通りに見えなければなりません:

    [C#]

    
                 [DicomAddInAttribute("Storage Commit AddIn", "1.0.0.0", Description = "Implements Storage Commitment", Author = "")]
                 public class StorageCommitAddIn : IProcessNAction
                 {
                 }
                 
    
  11. IProcessNActionと選ばれた道具インターフェースの右クリック-> コンテキストメニューからインターフェースを実装します。クラスは、以下の通りにここで見えなければなりません:

    [C#]

    
                 public class StorageCommitAddIn : IProcessNAction
                 {
                    public DicomCommandStatusType OnNAction(DicomClient Client, byte PresentationId, int MessageID, string AffectedClass, string Instance, int Action, DicomDataSet Request, DicomDataSet Response)
                    {
                       throw new Exception("The method or operation is not implemented.");
                    }
                    
                    #endregion
                    #region IProcessBreak Members
                    public void Break(BreakType type)
                    {
                       throw new Exception("The method or operation is not implemented.");
                    }
                 }
                 
    
  12. 何に反応することに興味を持っているかについて、サーバに話すために、OnNActionメソッドにかかっているPresentationContextAttributesを指定する必要があります。これにより、サーバーはクライアントからの接続時に使用するアソシエーションを構築できます。保存委託をサポートするためには、OnNActionメソッドに以下のように属性を指定する必要があります。

    [C#]

    
                 [PresentationContext(DicomUidType.StorageCommitmentPushModelClass, DicomUidType.ImplicitVRLittleEndian)]
                 public DicomCommandStatusType OnNAction(DicomClient Client, byte PresentationId, int MessageID, string AffectedClass, string Instance, int Action, DicomDataSet Request, DicomDataSet Response)
                 {
                    throw new Exception("The method or operation is not implemented.");
                 }
                 
    
  13. StorageCommitAddInクラスに以下の支援性能を追加します:

    [C#]

    
                 private IDicomRequest _DicomRequest;
                 /// <summary>
                 /// Allows the user to send a DICOM request from an addin.
                 /// </summary>
                 /// <value>The dicom request.</value>
                 [Dependency] 
                 public IDicomRequest DicomRequest
                 {
                    set
                    {
                       _DicomRequest = value;
                    }
                 }
                 private IAETitle _AeTitle;
                 /// <summary>
                 /// Let's get the AE title information.
                 /// </summary>
                 /// <value>The AE title.</value>
                 [Dependency]
                 public IAETitle AeTitle
                 {
                    set
                    {
                       _AeTitle = value;
                    }
                 }
                 
    
    上記のコードでは、Microsoft Unityの依存性注入を使用して、アドインに必要な機能を実装する登録済みインタフェースを取得しています。たとえば、IDicomRequestインターフェースは、Leadtools.Dicom.Server.exeによって実装されます。
  14. IProcessNActionインターフェースのためにcodeを追加します。サンプルコードは別々のスレッドの上でコミット要求を処理して、あとでクライアントに反応します。保存委託の完全に動作するサンプルのために、LEADTOOLS PACSフレームワークインストールの一部としてインストールされる保存委託アドインを参照します。codeは、以下の通りに見えなければなりません:

    [C#]

    
                 [PresentationContext(DicomUidType.StorageCommitmentPushModelClass, DicomUidType.ImplicitVRLittleEndian)] 
                 public DicomCommandStatusType OnNAction(DicomClient Client, byte PresentationId, int MessageID, string AffectedClass, string Instance, int Action, DicomDataSet Request, DicomDataSet Response) 
                 { 
                    DicomDataSet ds = new DicomDataSet(Client.Server.TemporaryDirectory);
                    
                    // Copy the dataset. We will be using it in a thread so we need to copy 
                    // it so will be available in the thread. 
                    ds.Copy(Request, null, null);
                    
                    // Process the commit on a separate thread. This will allow us to immediately 
                    // return a notification to the client informing that we have received the 
                    // message. 
                    result = AsyncHelper.Execute(delegate()
                    { 
                       DicomDataSet commitDS = new DicomDataSet(Client.Server.TemporaryDirectory);
                       PresentationContext pc = new PresentationContext();
                       DicomRequest request = new DicomRequest(Client);
                
                       // At this point we would process the storage commit and build a response
                       // dataset. For a complete example of this refer to the sample storage commit
                       // add-in that ships with the LEADTOOLS PACS Framework.
                       // Prepare to send our response back to the requesting client
                       pc.AbstractSyntax = DicomUidType.StorageCommitmentPushModelClass; 
                       pc.TransferSyntaxes.Add(DicomUidType.ImplicitVRLittleEndian);
                       request.PresentationContexts.Add(pc);
                       request.RequireMessagePump = true;
                       request.ReceiveNReportResponse += new ReceiveNReportResponseDelegate(request_ReceiveNReportResponse);
                       request.ConnectType = ConnectType.Conditional;
                       _DicomRequest.SendNReportRequest(request, PresentationId, 1000, DicomUidType.StorageCommitmentPushModelClass, 
                       DicomUidType.StorageCommitmentPushModelInstance,1, commitDS);
                    });
                    
                    Response = null; 
                    return DicomCommandStatusType.Success; 
                 }
                    
                 void request_ReceiveNReportResponse(DicomRequest request, byte presentationID, int messageID, string affectedClass, string instance, DicomCommandStatusType status, int dicomEvent, DicomDataSet dataSet)
                 {
                    // The LEADTOOLS PACS Framework provides a default implementation. 
                 }
                 
    
  15. IProcessBreakインターフェースのサポートを追加します。これは、停止されるのにStorageCommitアクションを見込みます。StorageCommitAddinクラスに以下のcodeを追加します:

    [C#]

    
                 private AsyncResult result = null;
                 public void Break(BreakType type)
                 {
                    // Stop the commit process if we received a request
                    // to stop processing
                    if(result != null && !result.IsCompleted)
                       result.Cancel();
                 }
                 
    
  16. クラスライブラリをビルドし、生成されたクラスライブラリファイルを以前に作成したサーバーのAddInディレクトリーに配置します。
  17. サーバが実行しているならば、それを停止します。サーバを開始します。
  18. 保存委託のより現実的な実装のために、LEADTOOLS PACSフレームワークインストール付きで出荷する保存委託サンプルを参照します。