2016-05-06 12 views
0

MQ環境のクライアント側から使用可能なすべてのキュー名を.Net(IBM.WMQ)、Version 8.0? 私は、MQ (similar founds at code project)にデータを読んで送信するための素晴らしい.Netアプリケーションを書いています。IBM .Net APIを使用してWebSphare MQ環境のすべてのキュー名を取得できません

ツールIBMテストツールRfhUtil.exeを使用するときと同じように、またはIBMからrunmqsc DISPLAY QUEUEコマンドを使用して実行できるように、使用可能なすべてのキュー名をIBM.WMQ .NET libから動的に取得する方法.Net lib?

私はAPIReference manualおよびIBM programming guideを成功させずに閲覧しようとしました。

答えて

0

JavaにはPCFMessageAgentのクラスがあり、.NET APIの同等のクラスを参照するものもあります。

SYSTEM.ADMIN.COMMAND.QUEUEにアクセスする権利がある限り、PCFメッセージを自分で作成することは可能です。

また、SYSTEM.COMMAND.REPLY.MODELまたはSYSTEM.MQSC.REPLY.QUEUEに基づいて応答キューを動的に作成する必要があります。

1

MQ .NETにあるレベルのPCFサポートがありますが、文書化されていません。次に、キュー・マネージャーにキュー名を表示するためのサンプル・コードを示します。

using System; 
using System.Collections; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using IBM.WMQ; 
using IBM.WMQ.PCF; 

namespace PCFNET 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      InquireQueue(); 
     } 

    /// <summary> 
    /// Display list of queue names and queue depth for each queue 
    /// </summary> 
    public static void InquireQueue() 
    { 
     PCFMessageAgent messageAgent = null; 
     try 
     { 
      // Create bindings connection to queue manager 
      messageAgent = new PCFMessageAgent("DEMOQMGR"); 

      // Build Inquire command to query queue name 
      PCFMessage reqeuestMessage = new PCFMessage(MQC.MQCMD_INQUIRE_Q); 
      reqeuestMessage.AddParameter(MQC.MQCA_Q_NAME, "*"); 

      // Send request and receive response 
      PCFMessage[] pcfResponse = messageAgent.Send(reqeuestMessage); 

      // Process and print response. 
      int pcfResponseLen = pcfResponse.Length; 
      for (int pcfResponseIdx = 0; pcfResponseIdx < pcfResponseLen; pcfResponseIdx++) 
      { 
       try 
       { 
        String qName = pcfResponse[pcfResponseIdx].GetStringParameterValue(MQC.MQCA_Q_NAME); 
        int qDepth = pcfResponse[pcfResponseIdx].GetIntParameterValue(MQC.MQIA_CURRENT_Q_DEPTH); 
        Console.WriteLine("QName: " + qName + " Depth: " + qDepth); 
       } 
       catch (PCFException pcfex) 
       { 
        //Ignore exception and get the next response 
       } 
      } 
     } 
     catch (PCFException pcfEx) 
     { 
      Console.Write(pcfEx); 
     } 
     catch (MQException ex) 
     { 
      Console.Write(ex); 
     } 
     catch (Exception ex) 
     { 
      Console.Write(ex); 
     } 
     finally 
     { 
      if (messageAgent != null) 
       messageAgent.Disconnect(); 
     } 
    } 
} 

}

+0

InquireQueue()メソッドを呼び出したとき、私はQueueNameException(2058)エラーを取得します。アクティブなセッション(他のキューへの)が確立され、MqQueueManagerオブジェクトが有効な接続データで作成された直後に、これを実行しようとしました。私はブースのケースで同じエラーが発生します。例外がスローされました:InquireQueue()metodを呼び出すとき、Amqmdnet.dll、CompCode:2、理由:2058で 'IBM.WMQ.MQException'。私は接続が確立しているので、私はMQへの権利が正しいことを知っています。 QueueManagerの名前がMQQueueManagerのInquireQueue()メソッドに含まれているのがわかりません。 –

+0

あなたの例でこれを忘れましたか? –

+0

この例は、名前がPCFMessageAgentクラスのコンストラクターに渡されているのを見ると、ローカルキューマネージャDEMOQMGRに接続します。理由コード2058は、キュー・マネージャー名のエラーを意味します。ローカル・キュー・マネージャーまたはリモート・キュー・マネージャーに接続していますか。リモート・キュー・マネージャーの場合は、チャネル名、ホスト名、および詩番号を入力して、クライアント接続でMQQueueManagerクラスのインスタンスを作成する必要があります。 – Shashi

関連する問題