How to create a new MSMQ message in IronPython with label, reply queue and other properties

可紊 提交于 2019-12-11 12:42:51

问题


I'm following this example here to use MS Message Queues with IronPython. The example works to create a message text string without any properties.

import clr
clr.AddReference('System.Messaging')
from System.Messaging import MessageQueue

ourQueue = '.\\private$\\myqueue'
queue = MessageQueue(ourQueue)
queue.Send('Hello from IronPython')

I am trying to create an empty message and then add properties (like label, a reply queue and a binary message body) and then send that complete message.

How can I do this in IronPython?

The documentation of the message class is here, but obviously has no python sample code. I have never used .net code with python and just installed IronPython to connect to an existing MSMQ environment, so I'm a bit stuck in how to proceed.

Any help?

update

See answer below, I managed to guess the systax to create a message. The solution seems a bit hacky so I'll leave this open for a few days


回答1:


I don't think that this works with IronPython classes, because serialize and deserialize them does not work like it does for c#/.net classes.

The only thing to get this work, will be to get IronPython classes serialize-able and deserialize-able. I think deserialization will be the hard part. But you may proof me wrong.




回答2:


I've started guessing the syntax by examining c# examples and have hacked a solution to the problem. The following code delivers a message with a user defined label and response queue and a body message.

import clr

from System import Array
from System import Byte

clr.AddReference('System.Messaging')
from System.Messaging import MessageQueue
from System.Messaging import Message

ourQueue = '.\\private$\python_in'
ourOutQueue = '.\\private$\python_out'

if not MessageQueue.Exists(ourQueue):
    queue = MessageQueue.Create(ourQueue)
else:
    queue = MessageQueue(ourQueue)

if not MessageQueue.Exists(ourOutQueue):
    out_queue = MessageQueue.Create(ourOutQueue)
else:
    out_queue = MessageQueue(ourOutQueue)

mymessage = Message()
mymessage.Label = 'MyLabel'
mymessage.ResponseQueue = out_queue

mystring = 'hello world'
mybytearray = bytearray(mystring)

# this is very hacky
mymessage.BodyStream.Write(Array[Byte](mybytearray),0,len(mybytearray))

queue.Send(mymessage)


来源:https://stackoverflow.com/questions/34815850/how-to-create-a-new-msmq-message-in-ironpython-with-label-reply-queue-and-other

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!