2

我必须创建一个客户端来收听队列上的消息。正在使用 SSL,我正在点网中开发。我翻阅了数百页的文档和论坛,以找到清晰简洁的内容,但看起来并非如此!

我有一个 jks,我可以远程登录到发布队列的服务器。以下是我到目前为止的代码...

var factoryfactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
var connectionfactory = factoryfactory.CreateConnectionFactory();
connectionfactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE,XMSC.WMQ_CM_CLIENT_UNMANAGED);

connectionfactory.SetStringProperty(XMSC.WMQ_SSL_KEY_REPOSITORY, @"C:\...\spindev1.key");
connectionfactory.SetStringProperty(XMSC.WMQ_SSL_CIPHER_SPEC, "SHA_WITH_RSA");
connectionfactory.SetStringProperty(XMSC.WMQ_CHANNEL, "SPINDEV1");

var connection = connectionfactory.CreateConnection();

我认为某处必须有密码,但我不知道怎么做。我当前的错误是 2538。

编辑

所以我刚刚添加了 IP 和端口,现在我收到错误代码 2393。

connectionfactory.SetStringProperty(XMSC.WMQ_HOST_NAME, "**.***.***.***");
connectionfactory.SetIntProperty(XMSC.WMQ_PORT, 1431);

编辑 2

好的,现在我已经设法开始使用提供队列数据的人提供的代码,但是他说为了使用 SSL 密钥,应用程序必须作为 spindev1 运行 - 这当然意味着创建一个全新的帐户?

4

2 回答 2

3

对于 XMS .NET,密钥库必须是 CMS 类型,而不是 JKS。JKS 用于 Java 客户端。CMS 密钥库将具有“.kdb”作为文件扩展名。因此,为XMSC.WMQ_SSL_KEY_REPOSITORY.

SHA_WITH_RSA在您使用的 CipherSpec 上,我在 MQ 中找不到。您能否验证名称是否正确,或者您可以尝试使用不同的密码。

高温高压

于 2012-06-29T06:40:24.557 回答
2

好的问题现在已经解决了。下面是创建和启动连接的代码摘录。主要问题之一是 SSL 密钥是为名为 dev1 的用户制作的,而我的用户是 mcanty。如果我知道更多,我相信这个结果会更快到来。

    public SISMQConnection(string connectionFactoryName, string queueName, string sslPeerName,
        string bindingsFilePath, string sslKeyRepository)
    {
        try
        {
            Hashtable aHashtable = new Hashtable { { "XMSC_IC_URL", bindingsFilePath } };
            InitialContext jndi = new InitialContext(aHashtable);

            //Java Naming and Directory Interface (JNDI)
            _queueObject = (IDestination)jndi.Lookup(queueName);
            _queueManager = (IConnectionFactory)jndi.Lookup(connectionFactoryName);

            _queueManager.SetStringProperty(XMSC.WMQ_SSL_PEER_NAME, string.Format("CN=\"{0}\"", sslPeerName));
            _queueManager.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED);
            _queueManager.SetStringProperty(XMSC.WMQ_SSL_KEY_REPOSITORY, sslKeyRepository);
            _queueManager.SetStringProperty(XMSC.WMQ_SSL_CIPHER_SPEC, "DES_SHA_EXPORT");
        }
        catch (Exception e)
        {
        }
    }

    public void Connect()
    {
        try
        {
            IConnection QueueConnection = _queueManager.CreateConnection();

            QueueSession = QueueConnection.CreateSession(true, AcknowledgeMode.AutoAcknowledge);

            IMessageConsumer QueueConsumer = QueueSession.CreateConsumer(_queueObject);

            QueueConsumer.MessageListener = OnNewMessageCallback;

            QueueConnection.Start();
        }
        catch (Exception e)
        {
        }
    }
于 2012-07-02T17:20:12.560 回答