3

我正在尝试解决向 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_PROPERTY和设置。MQC.HOST_NAME_PROPERTYMQC.CHANNEL_PROPERTY

MQC.MQOO_OUTPUT使用选项和打开队列MQC.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,但我不知道是否需要使用它以及如何使用它。

4

2 回答 2

1

对我有用的解决方案是将CharacterSet属性设置MQMessage819

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));

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

于 2011-06-20T14:42:55.453 回答
0

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

所以,你需要做的是:

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

或者将代码集 819 更改为数据实际编码的任何编码,你说的是 UTF-16,所以这将是代码集 1200。

于 2011-06-15T06:32:06.640 回答