【问题标题】:XMS.NET hanging indefinitely on factory.CreateConnection("username", null);XMS.NET 无限期挂在 factory.CreateConnection("username", null);
【发布时间】:2015-09-11 17:33:21
【问题描述】:

我正在尝试使用 .NET 客户端连接到现有的 JMS 队列。 我知道队列正在工作,我已经使用 IBM MQ Explorer 浏览过它。

在以下代码中,对 factory.CreateConnection 的调用一直挂起 - 它不会跳转到下一行,也不会显示任何错误消息。它甚至不消耗任何 CPU。

是否有任何我应该尝试让它工作的选项(或至少让它向我显示任何类型的错误消息)?

private static IConnectionFactory GetConnectionFactory()
    {
        var factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
        var cf = factoryFactory.CreateConnectionFactory();

        cf.SetStringProperty(XMSC.WMQ_HOST_NAME, "server address");
        cf.SetIntProperty(XMSC.WMQ_PORT, portnumber);
        cf.SetStringProperty(XMSC.WMQ_CHANNEL, "channelname");
        cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
        cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "queuemanager");
        cf.SetIntProperty(XMSC.WMQ_BROKER_VERSION, XMSC.WMQ_BROKER_UNSPECIFIED);

        return (cf);
    }

main方法有以下几个:

var factory = GetConnectionFactory();
var connection = factory.CreateConnection("username", null);

【问题讨论】:

  • 您使用的是什么版本的 XMS 和 MQ?您是否安装了完整的 MQ 客户端?
  • 我已经安装了 mqc7_7.0.1.12_win(MQ 客户端)和 ia9h_2.0.0.12(XMS)
  • 还有队列本身 - MQ Explorer 在 Version 属性中显示 07010003。平台 Unix,命令级别 710。这些信息对您有帮助吗?
  • 更好的是,获得更新的 MQ 客户端和队列管理器版本。您拥有的那个将在 3 个月内失去支持。如果它在生产中,您将希望能够打开 PMR,是吗?此外,随着产品更新,.Net 类会变得更好。另外仅供参考:“队列管理器”是队列的容器。队列没有版本号,但队列管理器有。我之所以提到这一点,是因为对组件结构的准确理解往往会产生更好的代码来使用它。
  • 谢谢。我安装了mqc8_8.0.0.3_win64 mq客户端,应该是最新的。不,应用程序不会挂起,也不会抛出任何异常,只是自行终止进程 - 再次在 factory.CreateConnection 调用中。我的catch子句中没有断点被击中,整个过程被关闭。它甚至将一个事件写入 Windows 事件日志,并将其追加

标签: c# jms ibm-mq xms


【解决方案1】:

我没有看到您的代码有任何问题,使用 MQ v8 对其进行了测试并且工作正常。我建议你这样做:

1) XMS 也可以在非托管模式下运行。所以改变

cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);

cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED)

看看有没有帮助。

2) 当调用挂起时,进入调试并查看调用堆栈以确定挂起点。如果没有 CPU 被消耗,它可能正在等待某个系统事件。

3) 与 IBM 建立 PMR。

【讨论】:

  • 哇,改成非托管真的很有帮助,谢谢。我现在得到一个 {"MQRC_HOST_NOT_AVAILABLE"} 异常,这意味着服务器端失败,对吧?
  • 检查您是否在应用程序中指定了正确的主机和端口号。如果它们正确,请检查队列管理器是否正在运行并正在侦听该端口。
猜你喜欢
  • 2015-09-13
  • 2015-12-15
  • 2017-06-29
  • 2011-05-07
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
相关资源
最近更新 更多