Отправка сообщения в SWIFT через WebSphere MQ с использованием кодировки ASCII - PullRequest
3 голосов
/ 10 июня 2011

Я пытаюсь решить проблему с приложением, которое отправляет сообщение в сеть 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..

. Мой вопрос: как отправить сообщение в очередь WebSphere MQ с использованием кодировки ASCII?

Соединение имеет свойства MQC.TRANSPORT_PROPERTY, MQC.HOST_NAME_PROPERTY и MQC.CHANNEL_PROPERTY set.

Очередь открывается с использованием опций MQC.MQOO_OUTPUT и MQC.MQOO_FAIL_IF_QUIESCING.

Сообщение создается в формате MQC.MQFMT_STRING и по умолчанию используются параметры сообщения put:

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

Я заметил, что перечисление MQC имеет значение CODESET_819, которое, вероятно, относится к ASCII, но я понятия не имею, нужно ли мне его использовать и как.

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Решение, которое работало для меня, состояло в том, чтобы установить для свойства CharacterSet MQMessage значение 819:

var mqMessage = new MQMessage {
  Format = MQC.MQFMT_STRING,
  CharacterSet = 819
}
mqMessage.WriteString(swiftMessage);

Коллега также сказала мне, что я могу использовать1007 * перегрузка, которая принимает байтовый массив.Что-то вроде этого:

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

Однако я не проверял, работает ли этот альтернативный подход.

0 голосов
/ 15 июня 2011

Я полагаю, что приложение SWIFT преобразуется в ASCII после чтения из очереди.

Итак, что вам нужно сделать:

Либо записать ASCII вСообщение MQ: Измените кодировку в своем приложении .Net, чтобы сделать кодировку ASCII 'swiftMessage'.

или изменить кодовый набор 819 на тот, который на самом деле является кодировкой данных, которую вы говорите как UTF-16,так что это будет кодовый набор 1200.

...