ส่งข้อความถึง SWIFT ผ่าน WebSphere MQ โดยใช้การเข้ารหัส ASCII

ฉันกำลังพยายามแก้ไขปัญหาเกี่ยวกับแอปพลิเคชันที่ส่งข้อความไปยังเครือข่าย SWIFT แอปพลิเคชันนี้เป็นแอปพลิเคชัน .NET และใช้แอสเซมบลี amdqmdnet.dll ของ IBM เพื่อสื่อสารกับเซิร์ฟเวอร์ 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 ตั้งค่าไว้

คิวถูกเปิดโดยใช้ตัวเลือก 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 แต่ฉันไม่รู้ว่าจำเป็นต้องใช้มันหรือไม่และอย่างไร


person Martin Liversage    schedule 10.06.2011    source แหล่งที่มา


คำตอบ (2)


วิธีแก้ปัญหาที่เหมาะกับฉันคือตั้งค่าคุณสมบัติ CharacterSet ของ MQMessage เป็น 819:

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

อย่างไรก็ตาม ฉันยังไม่ได้ยืนยันว่าแนวทางอื่นนี้ใช้ได้ผล

person Martin Liversage    schedule 20.06.2011

ฉันเชื่อว่าแอป SWIFT จะแปลงเป็น ASCII หลังจากที่อ่านจากคิว

ดังนั้นสิ่งที่คุณต้องทำ:

อย่างใดอย่างหนึ่ง เขียน ASCII ลงในข้อความ MQ: เปลี่ยนการเข้ารหัสในแอป .Net ของคุณเพื่อให้เข้ารหัส ASCII ของ 'swiftMessage'

หรือ เปลี่ยนชุดโค้ด 819 เป็นอะไรก็ตามที่เข้ารหัสข้อมูลจริงๆ ซึ่งคุณบอกว่าเป็น UTF-16 เพื่อให้เป็นชุดโค้ด 1200

person oneone    schedule 15.06.2011
comment
โดยพื้นฐานแล้วคำถามของฉันคือฉันควรดำเนินการและนำคำตอบของคุณไปใช้อย่างไร ฉันรู้ว่าฉันต้องบอกให้ WebSphere เข้ารหัสสตริงของฉัน แต่ต้องทำอย่างไร ฉันไม่เข้าใจส่วนหรือส่วนนั้นจริงๆ ฉันไม่สามารถบังคับให้ซอฟต์แวร์ภายนอก (ซอฟต์แวร์ SWIFT Alliance) ยอมรับข้อมูลที่เข้ารหัส UTF-16 โดยฉับพลันได้ - person Martin Liversage; 20.06.2011