RabbitMQ .NET クライアント DLL を MonoTouch プロジェクト (iOS プロジェクト) に移植しました。RabbitMQ サーバーにメッセージを送信できますが、メッセージを受信できず、例外が発生するため、次のコードを投稿します。
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));
}
---->: これらのコードは、次のコード行で終了します: " _RMQConnection = factory.CreateConnection();" 「System.ObjectDisposedException」を引き起こします。これらは情報です。
System.ObjectDisposedException: オブジェクトは破棄された後に使用されました。System.Threading.WaitHandle.CheckDisposed () [0x00016] で /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Threading/WaitHandle.cs:425 で 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 (ブール値) [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 (システム.
* *注 : このコードは、.NET Visual Studio 2010 プロジェクト (コンソールと GUI) で正しく実行されます。