我对IBM MQSeries并不十分熟悉,但我正在编写从我的队列服务器写入和读取文件的c#脚本。问题是我的阅读作品,但我的写作不。请注意,我使用的是同一队列,所以不要打扰朝这个方向前进。IBM MQSeries从.NET访问问题
我的代码首先访问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);
}
我的错误捕获给了我错误:
Error in the application
这当然不会显示太多。所以,我检查了服务器上的事件日志,这表明我的错误:
An error occurred receiving data from stx041774 (192.168.225.51) over TCP/IP. This may be due to a communications failure.
The return code from the TCP/IP (recv) call was 10054 (X'2746'). Record these values and tell the systems administrator.
我抬头一看10054和手段:
An existing connection was forcibly closed by the remote host.
没有人有任何想法,我能做些什么,使这项工作?是否有可能需要为写作设置MQC选项?因为我不知道如何处理这些选项,我甚至不确定这是否是问题。
请记住,我也闭上了连接,每次用:
public void Close()
{
queueMessage = null;
queue.Close();
qManager.Close();
}
~MQAccess()
{
queueMessage = null;
queue.Close();
qManager.Close();
}
你知道为什么你的第一行与其余行不同吗?这是非常不吸引人的。 – 2010-02-22 03:00:11