我现在已经在这个圈子里转了一会儿。我正在尝试使用提供的通道表文件连接到分布式队列管理器。如果我在服务器上指定环境变量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中的channels节覆盖。
我在代码中遗漏了什么吗?任何提示将不胜感激。
编辑:我已将connectionType更改为MQC.TRANSPORT_MQSERIES_MANAGED,并且我已经过了我遇到的错误。但是我现在收到了一个I / O错误:
System.IO.IOException未得到处理 用户代码Message =“I / O错误 发生了。“Source =”amqmdnet“
堆栈跟踪: 在IBM.WMQ.MQChannelTable.CreateChannelEntryLists(MQChannelListEntry) 名称列表)
我认为这很可能与https://www-304.ibm.com/support/docview.wss?uid=swg1IC69174有关,所以我现在正等中间件人员确认是否是这种情况并希望为我提供一个新的.TAB文件......
Edit2 看起来这不是问题。我运行了MQ跟踪并且它出错了,因为它无法找到AMQCLCHL.TAB文件。我不明白为什么它还在寻找这个文件。它应该使用我的web.config中指定的通道表。任何人都知道为什么它没有拿起这些价值观?
答案 0 :(得分:0)
.Net配置文件仅用于托管客户端连接类型,因此切换到托管模式肯定是朝着正确方向迈出的一步。现在的问题是应用程序是否实际上以托管模式运行。在信息中心的 Defining which connection type to use 部分中描述了一个决策树。请注意,在某些情况下,受管连接可能会回退到非受管连接。我建议贯穿本节,看看是否适用这些案例。
或者,尝试在mqclient.ini文件中设置通道表。未被.Net配置文件覆盖时使用此值。如果在此处设置值有效则会确认.Net配置文件中的值被忽略,可能是因为应用程序在非托管模式下运行。