2011-10-05 135 views
0

我有一些奇怪的問題。我認爲我正確地遵循了文檔,但是我的代碼不起作用。我有一個非常簡單的硬編碼測試(NUnit的):如何從代碼設置MQQueueManager的CCSID?

[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的CCSID。

如果我從控制檯運行我得到了同樣的錯誤的應用程序,但如果我通過調用

chcp 437 

我的測試應用程序的工作改變的代碼頁控制檯。我怎樣才能從代碼配置代碼頁?

回答

1

嗯,我找到了一個解決方法 - 它可以解決我的問題,但我不是很滿意它。我可以全局設置MQCCSID環境變量或通過調用:

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

這將配置代碼頁。仍然我想使用新的MQQueueManager實例的屬性來設置代碼頁。

0

將您的系統區域設置更改爲英語(美國),在Windows 7區域設置 - >管理 - >更改系統區域設置。此外,你也可以在regedit值中檢查它。 regedit-> HKEY_LOCAL_MACHINE-> SYSTEM-> CurrentControlSet-> Control-> Nls-> CodePage檢查OEMCP值。

0

這兩個都是答案正確的。對於Windows Forms Project,將環境變量MQCCSID設置爲與嘗試連接的隊列管理器的ccsid相同即可。 - 所述第二溶液

HKEY_LOCAL_MACHINE->系統 - > CurrentControlSet->控制 - > Nls->代碼頁> OEMCP值。

我有一個只適用於第二個解決方案的web應用程序(web表單)

相關問題