小编T. *_*bre的帖子

在System.Messaging和MSMQ 3.0中使用多播队列

我正在尝试使用MessageQueues使用多播功能通知用户数据更改的应用程序,但无法使其工作:发送消息的工作站确实接收到它,但其他正在运行的工作站似乎都没有抓住它发来的消息.

发送消息的过程如下:

Dim sendQueue As New Messaging.MessageQueue("FormatName:MULTICAST=234.1.1.1:8001")
Dim message As New Messaging.Message("message body...")
sendQueue.Send(message)
Run Code Online (Sandbox Code Playgroud)

并接收他们:

Dim receiveQueue As New Messaging.MessageQueue(".\private$\myQ")
receiveQueue.MulticastAddress = "234.1.1.1:8001"
receiveQueue.BeginReceive()

AddHandler receiveQueue.ReceiveCompleted, Sub(sender As Object, e As Messaging.ReceiveCompletedEventArgs)
    ' ... handle message
    receiveQueue.BeginReceive()
End Sub
Run Code Online (Sandbox Code Playgroud)

所以我显然遗漏了一些东西,而且我似乎无法在.NET中使用MSMQ 3.0进行多播.

另外,目前尚不清楚的是我是应该在每个工作站使用本地队列,还是在服务器上使用一个远程队列来组播消息?在组播消息上使用receive方法是否从队列中清除它们?

任何帮助,提示,技巧,建议,任何......都将受到欢迎.

另外,所有工作站都在同一个子网上,并且都安装了MSMQ 3.0.

最后一句话

谢谢你的笔记本电脑的帮助.这个问题实际上与我在使用COM对象测试解决方案时发现的权限有关:

尽管Queue属性对话框说明了,但在未经身份验证的队列中,权限并未完全被忽略,至少在使用多播时.如果您希望队列接收多播消息,则必须向"ANONYMOUS_LOGON"授予"发送消息"的权限.否则,多播消息只是在事件日志中没有任何通知的情况下被丢弃,或者除非我遗漏了什么.

在Win7工作站(XP工作站似乎没问题,这就是我指出的实际问题),通过代码创建的队列没有这样的权限,因此必须在创建队列后手动设置:

Dim msgQ = Messaging.MessageQueue.Create(queueName)
msgQ.SetPermissions("ANONYMOUS LOGON",
                    Messaging.MessageQueueAccessRights.WriteMessage)
Run Code Online (Sandbox Code Playgroud)

看起来在内部,MSMQ使用该帐户将多播消息写入未经身份验证的队列.

.net vb.net msmq

7
推荐指数
1
解决办法
3623
查看次数

创建接受对象名称作为参数的iSeries命令

我正在尝试在iSeries上创建一个新命令,其中一个参数必须是使用标准LIBRARY/FILE MEMBER语法的文件名,类似于

MYCMD FILE(MYLIB/MYFILE MYMEMBER)
Run Code Online (Sandbox Code Playgroud)

甚至

MYCMD FILE(MYLIB/MYFILE) MEMBER(MYMEMBER)
Run Code Online (Sandbox Code Playgroud)

我试过了 :

  • 使用带有*CHAR类型的FILE参数创建PARM语句
  • 使用ELEM语句创建特殊类型

但我找不到如何创建一个接受值为限定对象名称的参数,如与CPYTOIMPF一起使用的FROMFILE参数.

UPDATE

JamesA的答案很好,但不知怎的,我的CL变量中有两个额外的字符:

CMD

            PARM       KWD(FILE) TYPE(FNAME) PROMPT('CL +                  
                         source' 1)                                        
FNAME:      ELEM       TYPE(FILE) PROMPT('File')                        
            ELEM       TYPE(*NAME) LEN(10) PROMPT('Source +                
                         member')                                          
FILE:       QUAL       TYPE(*NAME) LEN(10)              
            QUAL       TYPE(*NAME) DFT(*CURLIB) SPCVAL(*CURLIB) PROMPT('Library') LEN(10) MIN(0)           
Run Code Online (Sandbox Code Playgroud)

CL

PGM        PARM(&PFIC &OUTFILE &CODEPAGE)        
DCL        VAR(&PFIC) TYPE(*CHAR) LEN(32)        
DCL        VAR(&LIB) TYPE(*CHAR) LEN(10)         
DCL        VAR(&FILE) TYPE(*CHAR) LEN(10)        
DCL        VAR(&MEMBER) TYPE(*CHAR) LEN(10)      

CHGVAR     VAR(&FILE) VALUE(%SST(&PFIC 3 10))  
CHGVAR     VAR(&LIB) VALUE(%SST(&PFIC 13 10))              
CHGVAR     VAR(&MEMBER) VALUE(%SST(&PFIC 23 …
Run Code Online (Sandbox Code Playgroud)

control-language ibm-midrange

5
推荐指数
1
解决办法
3051
查看次数

标签 统计

.net ×1

control-language ×1

ibm-midrange ×1

msmq ×1

vb.net ×1