Я не очень знаком с 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();
}
У вас есть идеи, почему ваша первая строка отличается от остальных? Это очень непривлекательно. –