使用ASCII编码通过WebSphere MQ向SWIFT发送消息

时间:2011-06-10 14:12:06

标签: .net encoding ibm-mq swift-mt

我正在尝试修复向SWIFT网络发送消息的应用程序的问题。该应用程序是一个.NET应用程序,它使用IBM的amdqmdnet.dll程序集与WebSphere MQ服务器进行通信。在WebSphere MQ服务器上,SWIFT Alliance软件正在运行。

消息从应用程序发送,但不会进入SWIFT网络。一些调查显示以下错误消息:

MQSeries Queue 'MQSWIFT/SWIFT.SENDER', Nbr 123, Session 4567, Sequence 890, Conversion error (From)
    MQ Msg Id    : AMQ MQSWIFT     <XX><XX><XX>X <X>-<XX>
    Message Info : Error in FIN block 1: can not find tag F01 in message
{.1.:.F.0.1. (rest of message removed)

发送的消息的开头是{1:F01,对我来说,这看起来像消息是用UNICODE(UTF-16)编码的,但SWIFT软件需要ASCII。 SWIFT软件看到{.1.:.F.0.1.

我的问题是:如何使用ASCII编码将消息发送到WebSphere MQ队列?

该连接设置了MQC.TRANSPORT_PROPERTYMQC.HOST_NAME_PROPERTYMQC.CHANNEL_PROPERTY属性。

使用选项MQC.MQOO_OUTPUTMQC.MQOO_FAIL_IF_QUIESCING打开队列。

使用格式MQC.MQFMT_STRING和默认放置消息选项:

创建消息
var mqMessage = new MQMessage { Format = MQC.MQFMT_STRING };
mqMessage.WriteString(swiftMessage);
var mqMessageOptions = new MQPutMessageOptions();
queue.Put(mqMessage, mqMessageOptions);

我注意到MQC枚举的值CODESET_819可能是指ASCII,但我不知道是否需要使用它以及如何使用。

2 个答案:

答案 0 :(得分:1)

对我有用的解决方案是将CharacterSet的{​​{1}}属性设置为MQMessage

819

同事也告诉我,我应该能够使用接受字节数组的var mqMessage = new MQMessage { Format = MQC.MQFMT_STRING, CharacterSet = 819 } mqMessage.WriteString(swiftMessage); 重载。这些方面的东西:

MQMessage.Write

但是,我还没有证实这种替代方法有效。

答案 1 :(得分:0)

我相信SWIFT应用程序在从队列中读取后会转换为ASCII。

那么,你需要做什么:

将ASCII写入MQ消息:更改.Net应用程序中的编码以使'swiftMessage'ASCII编码。

将代码集819更改为实际数据的任何编码,您说这是UTF-16,因此这将是代码集1200。