C# 使用XMS写入远程IBM MQ队列
我正在尝试使用XMS 9.1版本将消息放到C# 使用XMS写入远程IBM MQ队列,c#,.net,ibm-mq,xms,C#,.net,Ibm Mq,Xms,我正在尝试使用XMS 9.1版本将消息放到远程队列中。MQ服务器也已升级到9.1,但我的消息没有发送到远程服务器 var cf = factoryFactory.CreateConnectionFactory(); cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT); cf.SetStringProperty(XMSC.WMQ_HOST_NAME, _host); cf.SetIntProperty(XMSC.WMQ_P
远程
队列中。MQ服务器也已升级到9.1,但我的消息没有发送到远程服务器
var cf = factoryFactory.CreateConnectionFactory();
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
cf.SetStringProperty(XMSC.WMQ_HOST_NAME, _host);
cf.SetIntProperty(XMSC.WMQ_PORT, _port);
cf.SetStringProperty(XMSC.WMQ_CHANNEL, _channel);
cf.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, _managerName);
_connection = cf.CreateConnection();
_session = _connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
用另一种方法
var queue = _session.CreateQueue(queueName);
var producer = _session.CreateProducer(queue);
var msg = _session.CreateTextMessage(message);
producer.Send(msg);
我找不到很多例子。
生产者
上是否有必须设置的属性才能写入远程队列
提前感谢。在我的情况下,修复方法是设置WMQ\u目标\u客户端:
queue.SetIntProperty(XMSC.WMQ_TARGET_CLIENT, XMSC.WMQ_TARGET_DEST_MQ);
你收到了什么错误?没有。这是主要问题。我可以在WireShark中看到发送到服务器的消息。如果我手动将相同的消息放到队列中,它将发送到转发服务器。但是,在代码队列中编写它们并不是这样。您是否使用try/catch获取异常。请参阅此示例:您是否正在代码中执行
\u connection.Start()
?这两个都是。我正在捕获任何异常并启动连接。就像我上面提到的,我在WireShark中看到了发送到服务器A的消息。这很有趣,消息正在被接收,它们只是有RFH2头,这破坏了接收器。我想知道为什么您使用的带有v9.0 DLL的XMS没有发送RFH2头。我认为发送RFH2头始终是默认的,除非您实际关闭它,或者如果您有一个QALIAS,其中PROPCTL(无)指向您的QREMOTE,或者QLOCAL在接收端将其设置为NONE,或者SDR通道中有PROPCTL(无)。当您提到您连接的队列管理器也已升级时,它真的是一个定义了类似对象的新队列管理器吗?如果实际存在的qmgr已升级,则上述队列/通道属性不应丢失。否,它已升级。但我认为它以前是有效的,因为我们使用的是MQ.net客户端,而不是XMS客户端。我猜这是props.Add(MQC.TRANSPORT\u属性,MQC.TRANSPORT\u MQSERIES\u MANAGED)代码>正确设置标头?常规.net API不需要额外的努力就不会发送RFH2标头。RFH2头是JMS和XMS API的默认头。提供应用程序也发生了更改的详细信息,以及如何提供建议。