如何从代码中设置 MQQueueManager 的 CCSID?
我有一些奇怪的问题。我认为我正确地遵循了文档,但我的代码不起作用。我有一个非常简单的硬编码测试 (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
“我的测试应用程序”更改控制台的代码页,则会出现相同的错误。如何从代码配置代码页?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好吧,我找到了一个解决方法 - 它可能可以解决我的问题,但我对此不太满意。我可以全局设置
MQCCSID
环境变量,也可以通过调用:这将配置代码页。我仍然想使用新的 MQQueueManager 实例的属性来设置代码页。
Well I found a workaround - it can probably solve my problem but I'm not very satisfied with it. I can set up
MQCCSID
environment variable either globally or by calling:That will configure code page. Still I would like to use properties of a new
MQQueueManager
instance to setup code page.这两个答案都是正确的。对于 Windows 窗体项目,将环境变量 MQCCSID 设置为与您尝试连接的队列管理器的 ccsid 相同的值就足够了。
- 第二个解决方案
我有一个网络应用程序(网络表单),仅适用于第二个解决方案
Both of these are answers correct. For Windows Forms Project setting the environment variable MQCCSID the same as the ccsid of the Queue Manager that you are trying to connect will be enough.
- the 2nd solution
i had a web application(web forms) that only worked with the 2nd solution
在 Windows 7 区域设置 -> 中将系统区域设置更改为英语(美国)管理->更改系统区域设置。完成此操作后,您还可以在 regedit 值中检查它。
regedit->HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Control->Nls->CodePage 检查 OEMCP 值。
change your system locale to English(United States), on windows 7 Regional Settings -> Administrative->Change System locale. also after do that you can check it in regedit value.
regedit->HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Control->Nls->CodePage check OEMCP value.