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

Posted

技术标签:

【中文标题】使用 ASCII 编码通过 WebSphere MQ 向 SWIFT 发送消息【英文标题】:Sending a message to SWIFT via WebSphere MQ using ASCII encoding 【发布时间】:2011-09-12 13:08:58 【问题描述】:

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

消息从应用程序发送,但不进入 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,但我不知道是否需要使用它以及如何使用它。

【问题讨论】:

【参考方案1】:

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

那么,你需要做什么:

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

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

【讨论】:

我的问题基本上是我应该如何着手并实施您答案的“任一”部分。我知道我需要告诉 WebSphere 对我的字符串进行编码,但是怎么做呢?我不太了解“或”部分。我无法强制外部软件(SWIFT 联盟软件)突然接受 UTF-16 编码的数据。【参考方案2】:

对我有用的解决方案是将MQMessageCharacterSet 属性设置为819

var mqMessage = new MQMessage 
  Format = MQC.MQFMT_STRING,
  CharacterSet = 819

mqMessage.WriteString(swiftMessage);

一位同事还告诉我,我应该能够使用接受字节数组的MQMessage.Write 重载。大致如下:

var mqMessage = new MQMessage();
mqMessage.Write(Encoding.ASCII.GetBytes(swiftMessage));

但是,我尚未验证这种替代方法是否有效。

【讨论】:

以上是关于使用 ASCII 编码通过 WebSphere MQ 向 SWIFT 发送消息的主要内容,如果未能解决你的问题,请参考以下文章

在 Websphere Application Server 8.5 上运行的 Web 应用程序中的字符编码

WebSphere的jython编码的一个坑

websphere部署中文乱码问题

“UnicodeEncodeError:‘ascii’编解码器无法编码字符”

与具有 ASCII 编码的 FM-503 RFID 阅读器通信

浅谈Unicode编码