如何在 IronPython 中使用标签、回复队列和其他属性创建新的 MSMQ 消息

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

我按照此示例 here 将 MS 消息队列与 IronPython 结合使用。 该示例用于创建没有任何属性的消息文本字符串。

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

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

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

我如何在 IronPython 中执行此操作?

消息class的文档是here,但显然没有python示例代码。我从未将 .net 代码与 python 一起使用,只是安装了 IronPython 以连接到现有的 MSMQ 环境,所以我有点不知该如何继续。

有什么帮助吗?

更新

查看下面的答案,我猜到了创建消息的系统。 该解决方案似乎有点老套,所以我将其开放几天

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

完成这项工作的唯一方法是获取 IronPython 类 serialize-able 和 deserialize-able。我认为反序列化将是困难的部分。但你可能会证明我错了。

我已经开始通过检查 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)