我正在使用MSMQ编写一个简单的控制台客户端 - 服务器应用程序。我试图在我们设置的工作组上运行它。它们在同一台计算机上运行时运行良好,但我无法让它们通过网络连接。我已经尝试添加Direct=
,OS:
和其他一些前言的组合,但我的想法已经用完了,显然不知道正确的方法。我的队列没有GUID,这也有点令人困惑。每当我尝试连接到远程计算机时,都会收到无效的队列名称消息。我需要做些什么来完成这项工作?
服务器
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);
}
}
客户端:
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());
}
}
}
答案 0 :(得分:3)
答案 1 :(得分:1)
我有一次工作。我的建议是1:不要这样做,2:不要这样做,3:只使用私有队列并在192.168.x.x子网中分配工作站静态IP地址。为每台计算机提供一个主机文件,以将计算机名称映射到IP地址,或者直接在格式名称中使用IP地址。依靠工作组中的名称解析,希望在拉斯维加斯赢得轮盘赌。