返回首页

您好,

我已经完成一个小的服务器和客户端解决方案使用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)。任何建议,如何将消息发送到该专用队列?谢谢!

回答

评论会员:E 时间:2