2 Stimmen

Wie wird die CCSID für MQQueueManager vom Code aus festgelegt?

Ich habe ein seltsames Problem. Ich denke, ich folgte Dokumentation richtig, aber mein Code funktioniert nicht. Ich habe diese sehr einfache hart kodierte Test (NUnit):

[TestFixture]
public class MQQueueTests {

    public const string MessageContent = "<test>This is test message</test>";

    public static void Main(string[] args) {
        var tests = new MQQueueTests();
        tests.PutAndGetMessage();
    }

    [Test]
    public void PutAndGetMessage() {
        var properties = new Hashtable
                             {
                                 {MQC.HOST_NAME_PROPERTY, "TestServer"},
                                 {MQC.CHANNEL_PROPERTY, "Test.Channel"},
                                 {MQC.PORT_PROPERTY, 1415},
                                 // Is this correct? It looks like it is not 
                                 // enough because adding this line didn't solve 
                                 // the problem.
                                 {MQC.CCSID_PROPERTY, 437}  
                             };

        using (var manager = new MQQueueManager("Test.Queue.Manager", properties)) {
            using (MQQueue queue = manager.AccessQueue("Test.Queue", 
                MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_AS_Q_DEF)) {

                MQMessage message = new MQMessage();
                message.WriteUTF(MessageContent);
                queue.Put(message);

                MQMessage readMessage = new MQMessage();
                queue.Get(readMessage);

                Assert.AreEqual(MessageContent, readMessage.ReadUTF());

                queue.Close();
            }
            manager.Disconnect();
        }
    }
}

Ich führe die Testanwendung entweder über die Konsole oder über den Resharper 6 Test Runner aus. Wenn ich die Anwendung im Test Runner ausführe, erhalte ich immer folgende Ausnahme:

IBM.WMQ.MQException : MQRC_CHANNEL_CONFIG_ERROR (Grundcode ist 2539)

Die Ausnahme wird ausgelöst durch MQQueueManager.Connect (von seinem Konstruktor aufgerufen).

Wenn ich die MQ-Protokolle überprüfe, sehe ich:

AMQ9541: Die für die Datenkonvertierung bereitgestellte CCSID wird nicht unterstützt.

ERLÄUTERUNG: Das Programm wurde beendet, weil entweder die Quell-CCSID '437' oder die Ziel-CCSID '852' nicht gültig ist oder derzeit nicht unterstützt wird.

AKTION: Korrigieren Sie die ungültige CCSID, oder stellen Sie sicher, dass die angeforderte CCSID unterstützt werden kann.

Wenn ich die Anwendung von der Konsole aus ausführe, erhalte ich denselben Fehler, aber wenn ich die Codeseite für die Konsole ändere, indem ich

chcp 437

Meine Testanwendung funktioniert. Wie kann ich die Codepage aus dem Code heraus konfigurieren?

3voto

Ladislav Mrnka Punkte 355028

Nun, ich habe eine Lösung gefunden, die wahrscheinlich mein Problem lösen kann, aber ich bin nicht sehr zufrieden damit. Ich kann einrichten MQCCSID Umgebungsvariable entweder global oder durch Aufruf:

Environment.SetEnvironmentVariable("MQCCSID", "437");

Damit wird die Codepage konfiguriert. Dennoch würde ich gerne die Eigenschaften einer neuen MQQueueManager Instanz zur Einrichtung der Code-Seite.

1voto

Julian Punkte 39

Beides sind richtige Antworten. Für Windows Forms Project reicht es aus, wenn Sie die Umgebungsvariable MQCCSID mit der ccsid des Queue Managers, mit dem Sie sich verbinden wollen, gleichsetzen. - die 2. Lösung

HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Control->Nls->CodePage>OEMCP Wert.

ich hatte eine Webanwendung (Webformulare), die nur mit der zweiten Lösung funktionierte

0voto

user1028621 Punkte 1

Ändern Sie Ihr Systemgebietsschema auf Englisch (Vereinigte Staaten), unter Windows 7 Regionaleinstellungen -> Verwaltung->Systemgebietsschema ändern. Nachdem Sie das getan haben, können Sie den Wert auch in regedit überprüfen. regedit->HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Control->Nls->CodePage check OEMCP value.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X