2011-06-10 77 views
3

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

的消息从应用程序发送,但不进入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_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枚举有这可能指的ASCII值CODESET_819,但我不知道如果我需要使用它和如何。

回答

1

为我工作的解决方案是设置的CharacterSet财产在MQMessage819

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

一个collegaue还告诉我,我应该能够使用MQMessage.Write重载接受一个字节数组。沿着这些路线的东西:

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

不过,我还没有证实这种替代方法工作。

0

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

所以,你需要做什么:

要么写ASCII到MQ消息:在您的.NET应用程序,使“swiftMessage” ASCII编码改变编码。

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

+0

我的问题基本上是我应该如何去贯彻你的答案的“或者”部分。我知道我需要告诉WebSphere来编码我的字符串,但是怎么做?我不太了解“或”部分。我无法强制外部软件(SWIFT Alliance软件)突然接受UTF-16编码的数据。 – 2011-06-20 11:02:38