J'écris une application simple console client-serveur en utilisant MSMQ. J'essaie de l'exécuter sur le groupe de travail que nous avons mis en place. Ils fonctionnent très bien lorsqu'ils sont exécutés sur le même ordinateur, mais je n'arrive pas à les connecter au réseau. Je ai essayé d'ajouter Direct=
, OS:
, et un tas de combinaisons d'autres préfaces, mais je suis à court d'idées, et évidemment ne sais pas la bonne façon de le faire. Ma file d'attente n'a pas de GUID, ce qui est aussi légèrement déroutant. Chaque fois que je tente de me connecter à une machine distante, j'obtiens un message de nom de file d'attente invalide. Que dois-je faire pour que cela fonctionne?Comment puis-je me connecter à MSMQ via un groupe de travail?
Serveur:
class Program
{
static string _queue = @"\Private$\qim";
static MessageQueue _mq;
static readonly object _mqLock = new object();
static void Main(string[] args)
{
_queue = Dns.GetHostName() + _queue;
lock (_mqLock)
{
if (!MessageQueue.Exists(_queue))
_mq = MessageQueue.Create(_queue);
else
_mq = new MessageQueue(_queue);
}
Console.Write("Starting server at {0}:\n\n", _mq.Path);
_mq.Formatter = new BinaryMessageFormatter();
_mq.BeginReceive(new TimeSpan(0, 1, 0), new object(), OnReceive);
while (Console.ReadKey().Key != ConsoleKey.Escape) { }
_mq.Close();
}
static void OnReceive(IAsyncResult result)
{
Message msg;
lock (_mqLock)
{
try
{
msg = _mq.EndReceive(result);
Console.Write(msg.Body);
}
catch (Exception ex)
{
Console.Write("\n" + ex.Message + "\n");
}
}
_mq.BeginReceive(new TimeSpan(0, 1, 0), new object(), OnReceive);
}
}
Client:
class Program
{
static MessageQueue _mq;
static void Main(string[] args)
{
string queue;
while (_mq == null)
{
Console.Write("Enter the queue name:\n");
queue = Console.ReadLine();
//queue += @"\Private$\qim";
try
{
if (MessageQueue.Exists(queue))
_mq = new MessageQueue(queue);
}
catch (Exception ex)
{
Console.Write("\n" + ex.Message + "\n");
_mq = null;
}
}
Console.Write("Connected. Begin typing.\n\n");
_mq.Formatter = new BinaryMessageFormatter();
ConsoleKeyInfo key = new ConsoleKeyInfo();
while (key.Key != ConsoleKey.Escape)
{
key = Console.ReadKey();
_mq.Send(key.KeyChar.ToString());
}
}
}
Il semble que vous ayez créé une file d'attente privée; vous avez sûrement besoin de créer un public? –
Non. Les files d'attente privées devraient fonctionner. – dlras2