请找到以下代码:
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 webservice上有这个代码并且多次调用webservice时才会遇到问题。
在IIS服务器上安装IBM MQ客户端7.5.0.0,我正在使用相同版本的dll。
更新 错误说明:
错误消息句柄无效
位于IBM.WMQ的IBM.WMQ.CommonServices.CreateCommonServices()的IBM.WMQ.CommonServices.TraceEnvironment()处的System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId,Boolean firstModuleOnly)中的StackTrace,位于System.Diagnostics.Process.get_Modules()处。位于IBM.WMQ.MQManagedObject..ctor()的IBM.WMQ.MQBase..ctor()上的.CommonServices.TraceEnabled()
答案 0 :(得分:1)
感谢您提供调用堆栈。您提到的问题与MQ V7.5.0.2中的固定here非常相似。当您在MQ v7.5.0.0时,我建议您将MQ客户端升级到最新级别MQ v7.5.0.7并尝试。
答案 1 :(得分:0)
我在这里已多次说过它并且它适用于Java和.NET,MQEnvironment类不是线程安全的。通过使用它,你就是在脚下拍摄自己。
将值(channel,hostname& port#)放入HashTable并将HashTable传递给MQQueueManager类。
Hashtable qMgrHT = new Hashtable();
qMgrHT.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
qMgrHT.Add(MQC.HOST_NAME_PROPERTY, "10.10.10.10");
qMgrHT.Add(MQC.CHANNEL_PROPERTY, "TEST.CHL");
qMgrHT.Add(MQC.PORT_PROPERTY, 1414);
qMgrHT.Add(MQC.USER_ID_PROPERTY, "myUserID");
qMgrHT.Add(MQC.PASSWORD_PROPERTY, "myPwd");
MQQueueManager qMgr = new MQQueueManager(qManager, qMgrHT);
最后,编写代码,使其保持连接,而不是反复连接和断开连接。非常,非常糟糕的形式。