Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在HTTP上使用MSMQ。如何处理队列?_C#_.net_Msmq - Fatal编程技术网

C# 在HTTP上使用MSMQ。如何处理队列?

C# 在HTTP上使用MSMQ。如何处理队列?,c#,.net,msmq,C#,.net,Msmq,我目前正在尝试将MSMQ与C#和.NET结合使用,以实现IPC。 我正在努力理解它是如何工作的,我对这个问题很困惑。 我在以下帖子中发现了一些类似的问题: 然而,他们都在使用MSMQ和WCF,我现在不想使用WCF 我希望实现以下目标: 客户端:通过http向队列发送数据 服务器:通过http从队列接收数据 我的观点是,我希望服务器、客户机和队列都可以托管在可能不同的计算机上。(目前我正在同一台机器上测试所有东西) 这里我有以下代码,它展示了我的想法: 首先,我创建队列: if(!Syste

我目前正在尝试将MSMQ与C#和.NET结合使用,以实现IPC。 我正在努力理解它是如何工作的,我对这个问题很困惑。 我在以下帖子中发现了一些类似的问题:

  • 然而,他们都在使用MSMQ和WCF,我现在不想使用WCF

    我希望实现以下目标:

    客户端:通过http向队列发送数据

    服务器:通过http
    从队列接收数据

    我的观点是,我希望服务器、客户机和队列都可以托管在可能不同的计算机上。(目前我正在同一台机器上测试所有东西)

    这里我有以下代码,它展示了我的想法:

    首先,我创建队列:

    if(!System.Messaging.MessageQueue.Exists(@".\Private$\SimplestExamplePrivateQueue");
        System.Messaging.MessageQueue.Create(@".\Private$\SimplestExamplePrivateQueue");
    
    客户端代码:

    然后,在客户端,我有一个回调函数,当用户按下按钮发送消息时调用该函数

    private void button1_Click(object sender, System.EventArgs e)
    {
        try
        {           
            // Create a connection to the queue
            System.Messaging.MessageQueue mq = new System.Messaging.MessageQueue(@"FormatName:Direct=http://localhost/msmq/Private$/SimplestExamplePrivateQueue");
    
            // Create a point object to send
            Point myPoint = new Point (Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text)) ;
    
            // Send object 
            mq.Send (myPoint) ;
        }
    
        // Catch the exception that signals all types of error
        // from the message queueing subsystem. Report error
            // to the user. 
        catch (System.Messaging.MessageQueueException mqx)
        {
            MessageBox.Show (mqx.Message) ;
        }
    
    在这之前一切都很好

    服务器代码:

    然后,我有一个按钮,它调用回调函数从服务器端的队列中同步读取一条消息:

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            // Create a connection to the queue
            var mq = new MessageQueue(@"Direct=http://localhost/msmq/Private$/SimplestExamplePrivateQueue");
    
            // Set the queue's formatter to decode Point objects
            mq.Formatter = new XmlMessageFormatter(new[] {typeof (Point)});
    
            // Receive message synchronously
            Message msg = mq.Receive();
    
            // Convert received message to object that we think was sent
            var pt = (Point) msg.Body;
    
            // Display it to the user
            MessageBox.Show(pt.ToString(), "Received Point");
        }
    
        // Report any exceptions to the user. A timeout would cause such
        // an exception
        catch (Exception x)
        {
            MessageBox.Show(x.Message);
        }
    }
    
    在我对MSMQ(有限)的理解中,这应该是可行的。但是,当我调用
    messagemsg=mq.Receive()时我得到以下异常:

    The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted.
    
    和堆栈跟踪:

    at System.Messaging.MessageQueue.MQCacheableInfo.get_ReadHandle()
       at System.Messaging.MessageQueue.StaleSafeReceiveMessage(UInt32 timeout, Int32 action, MQPROPS properties, NativeOverlapped* overlapped, ReceiveCallback receiveCallback, CursorHandle cursorHandle, IntPtr transaction)
       at System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 action, CursorHandle cursor, MessagePropertyFilter filter, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
       at System.Messaging.MessageQueue.Receive()
       at InternetQueueingRecipient.Form1.button1_Click(Object sender, EventArgs e) in c:\Users\felipedalcin\Documents\MSMQ\MSMQandNET\InternetQueuing\InternetQueueingRecipient\Form1.cs:line 85
    

    有没有人知道我如何调试它,或者我想做的事情是否可以通过这些方法实现?

    您无法通过HTTP接收消息