Putting Nachricht in Websphere MQ via C# hat verschiedene Daten, die Länge als auch manuell indem ich die gleiche Meldung
MQMessage queueMessage = new MQMessage();
queueMessage.WriteString(strInputMsg);
queueMessage.Format = MQC.MQFMT_STRING;
MQPutMessageOptions queuePutMessageOptions = new MQPutMessageOptions();
Queue.Put(queueMessage, queuePutMessageOptions);
Verwendung von C#, mit dem obigen code, wenn ich den Eingang der Nachricht in die Warteschlange, die Daten, die Länge der Nachricht ist 3600.
Wenn ich manuell die Eingabe der Nachricht in die queue mit der rechten Maustaste auf die Warteschlange und wählen Setzen Test-Nachricht option, die Daten, die Länge der Nachricht ist 1799.
Ich bin wirklich verwirrt, warum dies der Fall ist. Die Botschaft in beiden Fällen wird eine xml-Zeichenfolge mit Erklärung. In Notepad++ gibt es 1811-Zeichen, einschließlich der Erklärung. Wenn ich eine Nachricht im debugger, bevor ich die Eingabe in der Warteschlange, der die Nachricht in xml konvertiert, ohne jede Linie oder Rückkehr Wagen.
Habe ich den xml-string verwenden:
//converts string message into xml by serializing it
public string GetMessage(MyMessage messageInstance)
{
//Serialize the request
XmlSerializer xsr = new XmlSerializer(typeof(MyMessage));
MemoryStream memoryStream = new MemoryStream();
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xsr.Serialize(xmlTextWriter, messageInstance);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
string XmlizedString = new UTF8Encoding().GetString((memoryStream.ToArray());
//Encode the xml
Encoding utf = Encoding.UTF8;
byte[] utfBytes = utf.GetBytes(XmlizedString);
//Load the document (XmlResolver is set to null to ingore DTD)
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.XmlResolver = null;
xmlDoc.LoadXml(utf.GetString(utfBytes));
return utf.GetString(utfBytes);
Bin ich etwas fehlt in meinem C# - Implementierung, ist das hinzufügen von zusätzlichen Zeichen?
Dank.
- UTF8 vs ASCII ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @Matten schlägt vor, ein problem könnte sein, die Zeichenkodierung.
Den Standardwert für die CharacterSet Eigentum ist 1200 (UNICODE) und WriteString wandelt auf den code der Seite angegeben CharacterSet.
Codepage 1200 ist UTF-16 little-endian, so dass Sie wahrscheinlich erhalten zwei bytes pro Zeichen. Es ist durchaus möglich, dass "Put Test-Nachricht" nutzt eine andere Kodierung mit einem byte pro Zeichen für die gemeinsamen Zeichen.
Unter der Annahme, dass die 3600 und 1799 Länge in bytes berechnet, die Sie darstellen könnte, 1800 UTF-16LE Zeichen und 1799 UTF-8-Zeichen (oder 1799 ASCII-Zeichen oder 1799 EBCDIC-Zeichen...).
Dass immer noch lässt uns mit einem Zeichen Unterschied in der Länge. Vielleicht WriteString beinhaltet ein abschließendes NULL-Zeichen in den string geschrieben?
Sind Sie sicher, dass Sie das Vertrauen der Graf Notepad++ haben Sie? Wenn Test-Nachricht platziert 1799-Zeichen in eine Nachricht gab es wohl 1799 Zeichen in die Daten, die Sie ihm zur Verfügung gestellt.
Edit: Vorausgesetzt, die Codierung der Theorie korrekt ist, könnten Sie verkürzen die Nachricht mit einer anderen Codierung. Wie kurz eine Codierung machen würde, eine bestimmte Nachricht würde davon abhängen, den tatsächlichen Inhalt der Zeichenfolge.
Zum Beispiel könnte eine ASCII-Kodierung um ein byte pro Zeichen.
Würden verkürzen Ihre Nachricht an 1800 bytes wenn alle Zeichen im xml-string, der hatte eine ASCII-Darstellung.
Alternative wäre die Verwendung von UTF-8-Codierung.
UTF-8 hat den Vorteil, dass (im Gegensatz zu ASCII) alle Charaktere haben eine Vertretung (für bestimmte Werte von "alle"). Der Nachteil ist, dass einige Zeichen benötigen zwei, drei oder sogar vier bytes, um Sie zu vertreten. Die häufigsten Zeichen sind codiert in einem byte, dann das nächste am häufigsten verwendete Zeichen werden in zwei bytes kodiert und so weiter.
Im besten Fall ist ein UTF-8-Codierung würde Ihnen auch 1800 Byte. Im schlimmsten Fall würde es Sie geben, 7200 bytes, aber das scheint sehr unwahrscheinlich, es sei denn Sie sind mit so etwas wie Klingonisch!