如何在 IronPython 中创建一条新的 MSMQ 消息,其中包含标签、回复队列和其他属性



我在这里按照这个例子将MS Message Queues与IronPython一起使用。该示例用于创建没有任何属性的消息文本字符串。

import clr
clr.AddReference('System.Messaging')
from System.Messaging import MessageQueue
ourQueue = '.\private$\myqueue'
queue = MessageQueue(ourQueue)
queue.Send('Hello from IronPython')

我正在尝试创建一个空消息,然后添加属性(如标签、回复队列和二进制消息正文),然后发送该完整的消息。

如何在 IronPython 中做到这一点?

消息类的文档在这里,但显然没有python示例代码。我从未在python中使用过.net代码,只是安装了IronPython以连接到现有的MSMQ环境,所以我有点卡在如何继续。

有什么帮助吗?

更新

请参阅下面的答案,我设法猜测systax来创建消息。解决方案似乎有点笨拙,所以我会把它打开几天

我认为这不适用于IronPython类,因为序列化和反序列化它们不像c#/.net类那样工作。

唯一要完成这项工作,就是让IronPython类可序列化和可反序列化。我认为反序列化将是困难的部分。但你可以证明我错了。

我已经开始通过检查 c# 示例来猜测语法和已经破解了问题的解决方案。以下代码传递带有用户定义的标签和响应队列以及正文消息的消息。

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)