4

我一直在这个圈子里转了一圈。我正在尝试使用提供的通道表文件连接到分布式队列管理器。如果我在我的服务器上指定环境变量 MQCHLLIB 和 MQCHLTAB,我可以让它工作。但是 IBM 文档声明 .net 配置文件可以覆盖这些变量。

这是我放在 web.config 文件中的内容:

...
<configSections>
   <section name="CHANNELS" type="System.Configuration.NameValueSectionHandler" />
</configSections>

<CHANNELS>
   <add key="ChannelDefinitionDirectory" value="C:\temp"></add>
   <add key="ChannelDefinitionFile" value="DSM_MOM_TEST.tab"></add>
</CHANNELS>
...

这是正在执行的代码:

Hashtable properties = new Hashtable();
//Add managed connection type to parameters.
const String connectionType = MQC.TRANSPORT_MQSERIES_CLIENT;
properties.Add(MQC.TRANSPORT_PROPERTY, connectionType);
return new MQQueueManager(queueManagerName, properties);

queueManagerName 设置为通用队列管理器“*Q101T”。

但是,这不起作用,我收到一个错误返回:2058 MQRC_Q_MGR_NAME_ERROR

除了环境变量和标准 mqclient.ini 应该被 web.config 中的通道节覆盖,我无法找到更多关于如何使其工作的文档。

我在代码中遗漏了什么吗?任何提示将非常感谢。

编辑:我已将 connectionType 更改为 MQC.TRANSPORT_MQSERIES_MANAGED 并且我正在克服我遇到的错误。但是我现在收到一个 I/O 错误返回:

用户代码未处理 System.IO.IOException 消息="发生 I/O 错误。" Source="amqmdnet"
StackTrace:在 IBM.WMQ.MQChannelTable.CreateChannelEntryLists(MQChannelListEntry nameList)

我认为这很可能与https://www-304.ibm.com/support/docview.wss?uid=swg1IC69174有关,所以我现在正在等待中间件人员确认是否是这种情况,并希望为我提供使用新的 .TAB 文件...

Edit2 看起来这不是问题。我运行了一个 MQ 跟踪,但它出错了,因为它找不到 AMQCLCHL.TAB 文件。我不明白为什么它仍在寻找这个文件。它应该使用我的 web.config 中指定的通道表。任何人都知道为什么它没有拾取这些值?

4

1 回答 1

0

.Net 配置文件仅用于托管客户端连接类型,因此切换到托管模式绝对是朝着正确方向迈出的一步。现在的问题是应用程序是否真的在托管模式下运行。信息中心的定义要使用的连接类型部分中描述了一个决策树。请注意,在某些情况下,托管连接可能会退回到非托管连接。我建议浏览本节以查看这些情况是否适用。

或者,尝试在 mqclient.ini 文件中设置通道表。该值在未被 .Net 配置文件覆盖时使用。如果在此处设置值有效,则它确认 .Net 配置文件中的值被忽略,可能是因为应用程序在非托管模式下运行。

于 2011-04-11T13:40:22.413 回答