gpt4 book ai didi

c# - IBM MQSeries 从 .NET 访问问题

转载 作者:可可西里 更新时间:2023-11-01 02:34:50 37 4
gpt4 key购买 nike

我对 IBM MQSeries 不是很熟悉,但我正在编写 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);
}

我的错误捕获给我错误:

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();
}

最佳答案

Squig 很接近,但没有雪茄。打开队列时,如果要读取和写入消息,则需要在打开选项中同时指定输入 输出。示例代码仅指定了输入选项。

关于c# - IBM MQSeries 从 .NET 访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2183338/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com