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

问题描述 投票:0回答:2

我按照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 中执行此操作?

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

有什么帮助吗?

更新

请参阅下面的答案,我设法猜测了创建消息的系统税。 这个解决方案看起来有点老套,所以我会将此开放几天

更新2

为了让任何从常规 Python 中寻找 MSMQ 的人受益, 你可以通过

来做到这一点
import pythoncom
import win32com.client

如果您需要将消息的答案发送到另一个队列, 有一个问题:唉,我没有找到一种方法来定义传入消息的回复队列。与从 C# 发送的消息不同,我的 C# 接收者看到一个空白的回复队列。我最终编写了一些黑客代码,该代码对空白回复队列名称做出反应,然后通过某种规则生成名称。如果您在阅读本文时需要更多信息,请发布一个单独的问题并在此处标记我,以便我看到此...

python ironpython msmq
2个回答
1
投票

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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.