Je ne suis pas très familier avec IBM MQSeries, mais j'écris des scripts C# qui écrivent et lisent des fichiers depuis mon serveur de file d'attente. Le problème est que ma lecture fonctionne mais pas mon écriture. S'il vous plaît noter que j'utilise la même file d'attente, alors ne vous embêtez pas aller dans cette direction.IBM MQSeries Accéder au problème à partir de .NET
Mon code accède tout d'abord le MQServer avec le code suivant:
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);
}
Je suis capable de lire les fichiers de ma file d'attente avec ce code:
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;
}
Si j'essaie cependant d'écrire avec le code suivant me donne des erreurs:
public void WriteMessage(string message)
{
queueMessage = new MQMessage();
queueMessage.WriteString(message);
queueMessage.Format = MQC.MQFMT_STRING;
queuePutMessageOptions = new MQPutMessageOptions();
queue.Put(queueMessage, queuePutMessageOptions);
}
Mon erreur catch me donne l'erreur:
Error in the application
Qui ne montre pas beaucoup bien sûr. Alors j'ai vérifié le journal des événements sur le serveur et cela m'a montré l'erreur:
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.
Je levai les yeux 10054 et signifie:
An existing connection was forcibly closed by the remote host.
Est-ce que quelqu'un a une idée de ce que je peux faire pour ce travail ? Y at-il peut-être une option MQC que je dois définir pour l'écriture? Parce que je ne sais pas quoi faire avec les options, je ne suis même pas sûr si c'est le problème.
S'il vous plaît garder à l'esprit que je ferme ma connexion aussi à chaque fois avec:
public void Close()
{
queueMessage = null;
queue.Close();
qManager.Close();
}
~MQAccess()
{
queueMessage = null;
queue.Close();
qManager.Close();
}
Savez-vous pourquoi votre première ligne est indentée différemment des autres? C'est très peu attrayant. –