Beispiel #1
0
        internal static bool GetExists(this PipeName pipeName)
        {
            if (pipeName.IsLocal())
            {
                string msmqPath = pipeName.GetMSMQPath();
                return(MessageQueue.Exists(msmqPath));
            }

            string myMSMQFormatName = pipeName.GetMSMQDirectName();

            MessageQueue[] queueList = MessageQueue.GetPrivateQueuesByMachine(pipeName.MachineName);
            return(queueList.Select(messageQueue => messageQueue.FormatName).Any(curMSMQFormatName => String.Compare(myMSMQFormatName, curMSMQFormatName, true) == 0));
        }
Beispiel #2
0
        internal static uint Count(this PipeName pipeName)
        {
            MSMQExt.MQMGMTPROPS props = new MSMQExt.MQMGMTPROPS {
                cProp = 1
            };
            try
            {
                props.aPropID = Marshal.AllocHGlobal(sizeof(int));
                Marshal.WriteInt32(props.aPropID, (int)MSMQExt.MQMGMT_QUEUE_PROPERTIES.PROPID_MGMT_QUEUE_MESSAGE_COUNT);

                // Marshal.SizeOf(typeof(MSMQExt.MQPROPVARIANT))
                props.aPropVar = Marshal.AllocHGlobal(24);
                Marshal.StructureToPtr(new MSMQExt.MQPROPVARIANT {
                    vt = MSMQExt.VT_NULL
                }, props.aPropVar, false);

                props.aStatus = Marshal.AllocHGlobal(sizeof(int));
                Marshal.WriteInt32(props.aStatus, 0);

                string machineName = (pipeName.IsLocal()) ? null : pipeName.MachineName;
                string specialPath = "QUEUE=" + pipeName.GetMSMQDirectName();

                int result = MSMQExt.MQMgmtGetInfo(machineName, specialPath, ref props);
                if (result != 0 || Marshal.ReadInt32(props.aStatus) != 0)
                {
                    return(0);
                }

                MSMQExt.MQPROPVARIANT propVar = (MSMQExt.MQPROPVARIANT)Marshal.PtrToStructure(props.aPropVar, typeof(MSMQExt.MQPROPVARIANT));
                if (propVar.vt != MSMQExt.VT_UI4)
                {
                    return(0);
                }
                else
                {
                    return(propVar.Union1.ulVal);
                }
            }
            finally
            {
                Marshal.FreeHGlobal(props.aPropID);
                Marshal.FreeHGlobal(props.aPropVar);
                Marshal.FreeHGlobal(props.aStatus);
            }
        }