2011-06-10 104 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