您好,
我已经完成一个小的服务器和客户端解决方案使用MSMQ服务器和客户端之间发送短信。
在我的领域工作的完善。
现在,我得到了一个坏消息。我一定要把它没有域的工作(互联网)。
我的解决办法是到现在为止很简单:
检查和加入队列:
public void check_Queue(string queueName)
{
if (!MessageQueue.Exists(".\\" + queueName))
{
MessageQueue queue;
//Pr眉fe und ggf. erzeuge MessageQueue
try
{
queue = MessageQueue.Create(".\\" + queueName, false);
//todo: Rechte pr眉fen und einschr盲nken, Category ebenso, ID ggf auch
queue.QueueName = queueName;
queue.Label = queueName;
//Rechte und Einstellungen MessageQueue
// Erzeuge AccessControlList
AccessControlList list = new AccessControlList();
// Neuen Trustee erzeugen f眉r alle Benutzer - todo sp盲ter einschr盲nken
Trustee tr;
if ((Thread.CurrentThread.CurrentUICulture.ToString().ToUpper() == "DE")
|| (Thread.CurrentThread.CurrentUICulture.ToString().ToUpper() == "DE-DE"))
tr = new Trustee("Jeder"); //todo herausfinden wie man das generell hinbekommt
else
tr = new Trustee("Everyone");
// AccessControlEntry erzeugen
// dieser erlaubt Trustee vorerst alles
AccessControlEntry entry = new AccessControlEntry(tr, GenericAccessRights.All, StandardAccessRights.All, AccessControlEntryType.Allow);
// AccessControlEntry zur AccessControlList hinzuf眉gen
list.Add(entry);
// AccessControlList f眉r queue 眉bernehmen
queue.SetPermissions(list);
}
catch (Exception ex)
{
_log.Log.Error(SiCResourceManager.GetResourceString(SiCResourceManager.SiEStringResource.ErrorMessage) + Environment.NewLine + ex.Message.ToString());
}
}
}
发送一条消息:
{C}
接收一个消息:
public string ReceiveMessage(string queueName)
{
// Formatter setzen
queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
string msgText = "";
try
{
// Message empfangen und formattieren, mit TimeOut
TimeSpan maxTime = new TimeSpan(SiCGlobals.receiveTimeout);
Message myMessage = queue.Receive(maxTime);
msgText = (string)myMessage.Body;
}
catch (MessageQueueException ex)
{
// Fehler beim Empfang oder in Queue
}
// Serialisierungs-Fehler
catch (InvalidOperationException ex)
{
}
// unbekannter Fehler
catch (Exception ex)
{
}
//Meldung zur眉ckgeben
return msgText;
}
看来,我已经得到一个问题,当我尝试检查/加我的队列,我不是一个域。
任何经历,可以请给我一些提示吗?
非常感谢
埃里克
注:
{体C3}
缴费灵:我改变了所有的队列,专用队列。添加队列工程,
和接收..处理不抛出异常了。
但是,(防火墙是关闭的)服务器不采取任何消息。
当与客户端发送一个消息,我现在使用:
MessageQueue的clientQueue =新的MessageQueue(全名@"\私人$ \"queueName)
我得到一个"无效的队列路径名"。全名是一个IP地址。
当我删除私人$ \ \路径是无效了,但它没有找到该队列(因为它是现在provate)。任何建议,如何将消息发送到该专用队列?谢谢!