私はIBMMQSeriesにあまり精通していませんが、キューサーバーからファイルを読み書きするc#スクリプトを書いています。問題は、読み取りは機能しますが、書き込みは機能しないことです。私は同じキューを使用しているので、わざわざその方向に進んではいけないことに注意してください。
私のコードは最初に次のコードでMQserverにアクセスします。
MQQueueManager qManager;
MQQueue queue;
MQMessage queueMessage;
MQGetMessageOptions queueGetMessageOptions;
MQPutMessageOptions queuePutMessageOptions;
string QueueName;
public MQAccess(string queueName, string queueManager, string connection, string channel)
{
QueueName = queueName;
qManager = new MQQueueManager(queueManager, channel, connection);
queue = qManager.AccessQueue(QueueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
}
次のコードを使用して、キューからファイルを読み取ることができます。
public bool NextMessage(ref string message, ref DateTime putDateTime)
{
queueMessage = new MQMessage();
queueMessage.Format = MQC.MQFMT_STRING;
queueGetMessageOptions = new MQGetMessageOptions();
queueGetMessageOptions.Options = MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING;
try
{
queue.Get(queueMessage, queueGetMessageOptions);
}
catch (MQException mqex)
{
if (mqex.ReasonCode == MQC.MQRC_NO_MSG_AVAILABLE)
{
message = "";
return false;
}
else
throw mqex;
}
message = queueMessage.ReadString(queueMessage.MessageLength);
putDateTime = queueMessage.PutDateTime;
if (message.StartsWith("´╗┐"))
{
message = message.Substring(3, message.Length - 3);
}
return true;
}
ただし、次のコードで書き込もうとすると、エラーが発生します。
public void WriteMessage(string message)
{
queueMessage = new MQMessage();
queueMessage.WriteString(message);
queueMessage.Format = MQC.MQFMT_STRING;
queuePutMessageOptions = new MQPutMessageOptions();
queue.Put(queueMessage, queuePutMessageOptions);
}
私のエラーキャッチは私にエラーを与えます:
アプリケーションのエラー
もちろん、これはあまり表示されません。そこで、サーバーのイベントログを確認したところ、次のエラーが表示されました。
TCP / IPを介してstx041774(192.168.225.51)からデータを受信するとエラーが発生しました。これは、通信障害が原因である可能性があります。
TCP / IP(recv)呼び出しからの戻りコードは10054(X'2746')でした。これらの値を記録し、システム管理者に伝えてください。
私は10054を調べて、次のことを意味します。
既存の接続は、リモートホストによって強制的に閉じられました。
誰かが私がこの仕事をするために何ができるか考えていますか?書き込み用に設定する必要のあるMQCオプションはありますか?オプションをどうすればいいのかわからないので、これが問題なのかどうかさえわかりません。
私も毎回接続を閉じることを覚えておいてください:
public void Close()
{
queueMessage = null;
queue.Close();
qManager.Close();
}
~MQAccess()
{
queueMessage = null;
queue.Close();
qManager.Close();
}