qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chuck Rolke <cro...@redhat.com>
Subject Re: Request/response between .NET server and python client
Date Wed, 11 Aug 2010 16:02:26 GMT
1. Yes, the Python code is sending the reply_to as an exchange. This triggers the exception
handler in the C# server.

Anyone know how to get Python to request a queue in the reply_to?

2. The second bug is in the C# server. The C# code maintains pointers to unmanaged objects.
After the server received the exception it appears to have destroyed the unamanged objects
before it destroys the managed objects. The managed objects then have pointers to objects
in memory that has been invalidated. Fixing this bug will require some thought.


----- "Gordon Sim" <gsim@redhat.com> wrote:

> From: "Gordon Sim" <gsim@redhat.com>
> To: users@qpid.apache.org
> Sent: Wednesday, August 11, 2010 6:17:20 AM GMT -05:00 US/Canada Eastern
> Subject: Re: Request/response between .NET server and python client
>
> On 08/11/2010 09:54 AM, Chris Howard wrote:
> > Hi,
> >
> > I am having difficulty with sending a simple request/response
> between a
> > server written in C# and a client written in python. I have no such
> > problems when the client and server are both written in python. I
> am
> > using qpid 0.7 (built from the trunk approx. 3 weeks ago)
> >
> > Here is the code for the C# server:
> >
> > try
> > {
> > Connection connection = new Connection("localhost:5672");
> > connection.Open();
> > Session session = connection.CreateSession();
> > Receiver receiver = session.CreateReceiver("send ; {create: always,
> > delete: always}");
> >
> > while (true)
> > {
> > Message request = receiver.Fetch(DurationConstants.FORVER);
> > Sender sender = session.CreateSender(request.ReplyTo);
> > Message response = new Message("pong");
> > sender.Send(response);
> > }
> > }
> > catch (System.Exception e)
> > {
> > Console.WriteLine(e.ToString());
> > }
> >
> > And here is the code for the python client:
> >
> > import qpid.messaging
> >
> > connection = qpid.messaging.Connection('amqp://localhost:5672')
> > connection.open()
> > session = connection.session()
> > receiver = session.receiver('#reply ; {create: always, delete:
> always}')
> > sender = session.sender('send ; {create: always, delete: always}')
> > request = qpid.messaging.Message(content = 'ping', reply_to =
> > receiver.source)
> > sender.send(request)
> > response = receiver.fetch(10)
> > print response.content
> > connection.close()
> >
> > I start the server, and then start the client. The server receives
> the
> > request from the client, but the call to CreateSender throws an
> > exception with the message:
> >
> > "Exchange 9224f93b-8c4b-4675-bc04-61e721387140#reply does not
> exist"
> 
> This appears to me to be a bug in the python client in converting an 
> address to an AMQP 0-10 reply-to struct. It is sending the reply-to as
> 
> an exchange value:
> 
>   {MessageProperties: reply-to={ReplyTo: 
> exchange=95004e55-23c9-4c41-acd0-bde7c09a6096#reply; }; 
> application-headers={}; }
> 
> As it represents a queue, I believe the name should be sent as the 
> routing-key of the reply-to struct, with the exchange left empty to 
> refer to the default (nameless exchange). Certainly this is what the
> c++ 
> client expects.
> 
> Rafi, do you agree?
> 
> > Furthermore, there is another exception thrown during program exit:
> >
> > Unhandled Exception: System.AccessViolationException: Attempted to
> read
> > or write
> > protected memory. This is often an indication that other memory is
> corrupt.
> > at qpid.messaging.Message.{dtor}(Message* )
> > at qpid.messaging.Message.__delDtor(Message* , UInt32 )
> > at Org.Apache.Qpid.Messaging.Message.Cleanup()
> > at Org.Apache.Qpid.Messaging.Message.!Message()
> > at Org.Apache.Qpid.Messaging.Message.Dispose(Boolean )
> > at Org.Apache.Qpid.Messaging.Message.Finalize()
> 
> This is a different issue and looks on first glance like a bug in the
> 
> .NET 'binding' for the c++ implementation of the messaging API.
> 
> Chuck, any thoughts on this?
> 
> > Also, the output from the broker suggests that the queue /has /been
> > created:
> >
> > 2010-08-11 09:44:37 info Queue
> > "9224f93b-8c4b-4675-bc04-61e721387140#reply": Policy created:
> > type=reject; maxCount=0; maxSize=104857600
> > 2010-08-11 09:44:37 error Execution exception: not-found: Exchange
> not
> > found: 9224f93b-8c4b-4675-bc04-61e721387140#reply
> > (..\..\qpid\cpp\src\qpid\broker\ExchangeRegistry.cpp:92)
> >
> > Can anyone explain what I am doing wrong here? Or is this a bug?
> 
> It's a bug (perhaps two in fact!).
> 
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:users-subscribe@qpid.apache.org

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Mime
View raw message