1

I have ported RabbitMQ .NET client DLL to MonoTouch project (iOS Project), i can send message to RabbitMQ Server, but i can't receive any message and cause exception , now i post these code:

    bool _DoneFlag=false;
    QueueingBasicConsumer _receiveMessageConsumer;

    string _QueueName;
    IConnection _RMQConnection;

    string RMQServerIP;
    string LocalIP;
    ConnectionFactory factory;
    IModel channel;
    BasicDeliverEventArgs messageInEnvelope;

            IModel channel;
            ConnectionFactory factory = new ConnectionFactory();
            factory.HostName = "172.16.1.24:";
            factory.Port=55672;

            // 接受消息的队列名称是本地的IP地址
                _QueueName = "172.16.1.1";
                _RMQConnection = factory.CreateConnection();
            channel = _RMQConnection.CreateModel();

            channel.QueueDeclare(_QueueName, true, false, true, null);
            _receiveMessageConsumer = new QueueingBasicConsumer(channel);
            channel.BasicConsume(_QueueName, true, _receiveMessageConsumer);
            while (_DoneFlag==false) {
                object result = null;
                _receiveMessageConsumer.Queue.Dequeue(400, out result);

                BasicDeliverEventArgs messageInEnvelope = (BasicDeliverEventArgs)result;
                if (messageInEnvelope == null) {

                    Console.WriteLine("messageInEnvelope == null)");
                    continue;
                }


                byte[] bytes = messageInEnvelope.Body;

                string str=System.Text.Encoding.UTF8.GetString(bytes);

                Console.WriteLine("接受到的消息:" + str);



                //RMQMessage msg = JsonConvert.DeserializeObject<RMQMessage>(System.Text.Encoding.UTF8.GetString(bytes));







            }

---->: These code stop in this code-line: " _RMQConnection = factory.CreateConnection();" and cause 'System.ObjectDisposedException',these are information:

System.ObjectDisposedException: The object was used after being disposed. at System.Threading.WaitHandle.CheckDisposed () [0x00016] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Threading/WaitHandle.cs:425 at System.Threading.EventWaitHandle.Set () [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Threading/EventWaitHandle.cs:129 at (wrapper remoting-invoke-with-check) System.Threading.EventWaitHandle:Set () at System.Net.Sockets.Socket+SocketAsyncResult.set_IsCompleted (Boolean value) [0x00024] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/Socket_2_1.cs:354 at System.Net.Sockets.Socket+SocketAsyncResult.Complete () [0x00037] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/Socket_2_1.cs:243 at System.Net.Sockets.Socket+SocketAsyncResult.Complete (System.Exception e) [0x00007] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/Socket_2_1.cs:304 at System.Net.Sockets.Socket+Worker.Connect () [0x0018c] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/Socket_2_1.cs:618 at System.Net.Sockets.Socket+Worker.DispatcherCB (System.Net.Sockets.SocketAsyncResult sar) [0x00088] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/Socket_2_1.cs:429

** NOTE : This code runs correctly in .NET Visual Studio 2010 Project( console & GUI).

user1985899
  • 211
  • 1
  • 3
  • 4

0 Answers0