請找到下面的代碼:「句柄無效」 execption recevied同時創造MQ隊列管理器的對象
MQEnvironment.Hostname = HostName;
MQEnvironment.Channel = Channel;
if (!string.IsNullOrEmpty(SSLKeyRepository))
{
MQEnvironment.SSLCipherSpec = SSLCipherSpec;
MQEnvironment.SSLKeyRepository = SSLKeyRepository;
}
if (Port > 0)
MQEnvironment.Port = Port;
try
{
MQManager = new MQQueueManager(QueueManager);
try
{
MQRequestQueue = MQManager.AccessQueue(QueueNameGet, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
MQResponseQueue = MQManager.AccessQueue(QueueNameGet, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);
return true;
}
catch (IBM.WMQ.MQException exIBM)
{
CloseConnection();
ErrorCode = exIBM.Reason;
ErrorDescription = exIBM.Message;
}
}
catch (IBM.WMQ.MQException exIBM)
{
CloseConnection();
ErrorCode = exIBM.Reason;
ErrorDescription = exIBM.Message;
}
catch (Exception ex)
{
CloseConnection();
ErrorCode = Constants.SYSTEMEXCEPTION;
ErrorDescription = ex.Message;
}
return false;
問題:我沒有得到這個問題,當我運行單個或2-3倍。但是當它多次循環運行時,我會遇到問題。 此外,我試圖從IIS服務器運行同一段代碼10,000次,並且它成功運行。
我得到的問題只有當我有這個代碼在IIS Web服務和Web服務被調用多次。
IBM MQ客戶端7.5.0.0安裝在IIS服務器上,我使用的是相同版本的dll。
UPDATE 錯誤說明:
錯誤消息中的句柄無效
堆棧跟蹤在System.Diagnostics.NtProcessManager.GetModuleInfos(的Int32的ProcessID,布爾firstModuleOnly)在System.Diagnostics.Process.get_Modules()在IBM.WMQ.CommonServices.CreateCommonServices()上的IBM.WMQ.CommonServices.TraceEnvironment()IBM上的IBM.WMQ.CommonServices.TraceEnabled()IBM上的IBMWMQ.MQBase..ctor().WMQ.MQManagedObject..ctor )
你能發佈確切的異常堆棧嗎?每次發送/獲取消息時,應用程序是否會打開與隊列管理器的連接?您是否通過調用隊列管理器對象的disconnect方法來調用close方法和連接來關閉已打開的隊列? – Shashi
是的,它在每次獲取/放置消息時都會打開連接。是的,每次完成get/put後關閉隊列和隊列管理器。因此,代碼是這樣寫的 1.打開隊列管理器 2.訪問隊列 3. GET /把消息隊列上 4.disconnect並關閉QM 5.disconnect隊列 –
我沒有確切的異常堆棧 –