У меня странная проблема. Я думаю, что следовал документации правильно, но мой код не работает. У меня есть очень простой жесткий кодовый тест (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();
}
}
}
Я запускаю тестовое приложение либо из консоли, либо через тестовый запуск Resharper 6. Если я запускаю приложение в тестовом средстве, я всегда получаю следующее исключение:
IBM.WMQ.MQException: MQRC_CHANNEL_CONFIG_ERROR (код причины - 2539)
Исключение выдается MQQueueManager.Connect
(вызывается его конструктором).
Если я проверяю журналы MQ, я вижу:
AMQ9541: CCSID, предоставленный для преобразования данных, не поддерживается.
ОБЪЯСНЕНИЕ: Программа завершилась, потому что либо исходный CCSID '437'
или целевой CCSID '852' недействителен или в настоящее время не поддерживается.
ДЕЙСТВИЕ: Исправьте неверный CCSID или убедитесь, что
запрашиваемый CCSID может быть поддержан.
Если я запускаю приложение из консоли, я получаю ту же ошибку, но если я изменяю кодовую страницу консоли, вызывая
chcp 437
Мое тестовое приложение работает. Как я могу настроить кодовую страницу из кода?