2016-03-24 5 views
1

QueueManagerから切断するときにエラーコード2195のMQExceptionが発生します。私はこれの理由を見つけることができません。この例外の理由を知るにはどうすればよいですか?QueueManagerから切断するときのMQエラー2195

私のコードは次のようになっています。最後の行が例外をスローしています。

 MQQueueManager qMgr = null; 
     MQQueue fromQueue = null; 

     try 
     { 
      // mq properties 
      Hashtable properties = new Hashtable(); 
      properties.Add(MQC.HOST_NAME_PROPERTY, _config.HostName); 
      properties.Add(MQC.PORT_PROPERTY, _config.Port); 
      properties.Add(MQC.CHANNEL_PROPERTY, _config.ChannelName); 
      // managed mode 
      properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED); 

      // create connection 
      qMgr = new MQQueueManager(_config.QueueManagerName, properties); 
      fromQueue = qMgr.AccessQueue(_config.QueueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING); 

      MQGetMessageOptions gmo = new MQGetMessageOptions(); 
      gmo.Options = MQC.MQGMO_SYNCPOINT | MQC.MQGMO_FAIL_IF_QUIESCING | MQC.MQGMO_WAIT; 
      gmo.WaitInterval = Convert.ToInt32(timeout.TotalMilliseconds % Int32.MaxValue); 

      try 
      { 
       MQMessage message = new MQMessage(); 
       fromQueue.Get(message, gmo);  //wait for message 

       if (message != null && message.MessageLength > 0) 
       { 
        string strMsg = message.ReadString(message.MessageLength); 
        ret = true; 
       } 
      } 
      catch (MQException ex) 
      { 
       if (ex.ReasonCode != MQC.MQRC_NO_MSG_AVAILABLE)      
       { 
        throw; 
       } 
      } 
     } 
     finally 
     { 
      try 
      { 
       if (fromQueue != null) 
        fromQueue.Close(); 
       if (qMgr != null) 
        if(qMgr.IsConnected) 
         qMgr.Disconnect(); 
+0

FDCファイルはありますか?どのMQのバージョンを使用していますか? – ValerieLampkin

+0

私はFDCファイルについて知らない。それは何のために使われていますか?サーバーのバージョンは7.5、クライアントのバージョンは8.0.0.4です。 –

+0

* MQがエラーを記録し、MQのエラー発生時に発生した情報をダンプするために書き込まれた.FDCファイル。問題のトラブルシューティングに役立ちます。 – ValerieLampkin

答えて

0

MQC.MQGMO_SYNCPOINT

ローカルUOW(作業単位)を作成しているが、あなたは、トランザクションをコミットしていないか、バックアウトありません。現在、通常の切断(異常またはクラッシュ)に対して、MQはメッセージを自動的にコミットすることを想定しています。しかし、あなたのためにあなたの仕事をしているMQには決して返信すべきではありません。

本当にUOWでメッセージを取得したいが、コミットまたはバックアウトの呼び出しを追加する必要がない場合は、MQC.MQGMO_NO_SYNCPOINTを使用することをお勧めします。

(qMgr.IsConnected)

このメソッド呼び出しは無意味である場合

。それが行うのは、最後の呼び出しのCC & RC値を調べて、trueまたはfalseを返すかどうかを判断することです。実際に接続をテストするわけではありません。私が言ったように、無意味です。

+0

ありがとうございます。私のコードはTransactionScopeの内部から呼び出されます。私はメッセージの取得とデータベースへの書き込みを同じトランザクションにしたい。 TransactionScopeの中にいても明示的にコミットまたはロールバックを呼び出さなければなりませんか? –

関連する問題