Mengirim pesan ke SWIFT melalui WebSphere MQ menggunakan pengkodean ASCII

Saya mencoba memperbaiki masalah pada aplikasi yang mengirimkan pesan ke jaringan SWIFT. Aplikasi ini adalah aplikasi .NET dan menggunakan rakitan amdqmdnet.dll IBM untuk berkomunikasi dengan server WebSphere MQ. Di server WebSphere MQ, perangkat lunak SWIFT Alliance sedang berjalan.

Pesan dikirim dari aplikasi, namun tidak masuk ke jaringan SWIFT. Beberapa penyelidikan telah mengungkapkan pesan kesalahan berikut:

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)

Awal pesan yang dikirim adalah {1:F01 dan bagi saya ini sepertinya pesan tersebut dikodekan dalam UNICODE (UTF-16) tetapi perangkat lunak SWIFT mengharapkan ASCII. Perangkat lunak SWIFT melihat {.1.:.F.0.1..

Pertanyaan saya adalah: Bagaimana cara mengirim pesan ke antrian WebSphere MQ menggunakan pengkodean ASCII?

Koneksi memiliki properti MQC.TRANSPORT_PROPERTY, MQC.HOST_NAME_PROPERTY dan MQC.CHANNEL_PROPERTY yang disetel.

Antrian dibuka menggunakan opsi MQC.MQOO_OUTPUT dan MQC.MQOO_FAIL_IF_QUIESCING.

Pesan dibuat menggunakan format MQC.MQFMT_STRING dan opsi kirim pesan default:

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

Saya perhatikan bahwa enumerasi MQC memiliki nilai CODESET_819 yang mungkin mengacu pada ASCII tetapi saya tidak tahu apakah saya perlu menggunakannya dan bagaimana caranya.


person Martin Liversage    schedule 10.06.2011    source sumber


Jawaban (2)


Solusi yang berhasil bagi saya adalah mengatur properti CharacterSet dari MQMessage menjadi 819:

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

Seorang kolega juga memberi tahu saya bahwa saya harus bisa menggunakan MQMessage.Write kelebihan yang menerima array byte. Sesuatu seperti ini:

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

Namun, saya belum memverifikasi bahwa pendekatan alternatif ini berhasil.

person Martin Liversage    schedule 20.06.2011

Saya yakin aplikasi SWIFT akan dikonversi ke ASCII setelah dibaca dari antrean.

Jadi, yang perlu Anda lakukan:

Salah satu tulis ASCII ke pesan MQ: Ubah pengkodean di aplikasi .Net Anda untuk membuat 'swiftMessage' dikodekan ASCII.

Atau ubah kumpulan kode 819 ke pengkodean data apa pun yang sebenarnya, yang menurut Anda adalah UTF-16, sehingga menjadi kumpulan kode 1200.

person oneone    schedule 15.06.2011
comment
Pertanyaan saya pada dasarnya adalah bagaimana saya harus menjalankan dan menerapkan bagian mana pun dari jawaban Anda. Saya tahu bahwa saya perlu memberi tahu WebSphere untuk menyandikan string saya, tetapi bagaimana caranya? Saya tidak begitu mengerti bagian ataunya. Saya tidak bisa memaksa perangkat lunak eksternal (perangkat lunak SWIFT Alliance) untuk tiba-tiba menerima data yang dikodekan UTF-16. - person Martin Liversage; 20.06.2011