C# 启动和停止窗口服务时System.Messaging.MessageQueueException(0x80004005)错误

C# 启动和停止窗口服务时System.Messaging.MessageQueueException(0x80004005)错误,c#,.net,service,msmq,C#,.net,Service,Msmq,实际上,我有一个窗口服务,它每隔一段时间读取MSMQ queuw。我的MSMQ队列正常工作,但问题是当我停止或启动windows服务时,它会抛出一个错误。完整错误如下所示: **ERROR 65 DAL.MsmqImportListener - A MSMQ error occured System.Messaging.MessageQueueException (0x80004005) at System.Messaging.MessageQueue.AsynchronousRequest.E

实际上,我有一个窗口服务,它每隔一段时间读取MSMQ queuw。我的MSMQ队列正常工作,但问题是当我停止或启动windows服务时,它会抛出一个错误。完整错误如下所示:

**ERROR 65 DAL.MsmqImportListener - A MSMQ error occured
System.Messaging.MessageQueueException (0x80004005)
at System.Messaging.MessageQueue.AsynchronousRequest.End()
at DAL.MsmqImportListener.PeekCompleted(Object sender, PeekCompletedEventArgs e)**



private static void PeekCompleted(object sender, PeekCompletedEventArgs e)
    {
        var msmq = sender as MessageQueue;
        var messageProcessor = e.AsyncResult.AsyncState as MessageProcessorMethod;
        try
        {
            using (var scope = new TransactionScope())
            {
                msmq.EndPeek(e.AsyncResult);
                var message = msmq.ReceiveById(
                    e.Message.Id,
                    TimeSpan.FromSeconds(double.Parse(ConfigurationManager.AppSettings["MsmqReceiveTimeout"])),
                    MessageQueueTransactionType.Automatic);
                messageProcessor(message);
                scope.Complete();
            }
        }

        catch (MessageQueueException mqe)
        {
            // Check if timeout...no action if timeout, else log error
            if (mqe.MessageQueueErrorCode != MessageQueueErrorCode.IOTimeout)
            {
                Logger.Error("A MSMQ error occured", mqe);
                EmailDispatcher.SendInformationEmail("A MSMQ error occured" + Environment.NewLine + mqe);
            }
        }
        catch (Exception ex)
        {

            Logger.Error(
                string.Format(
                    CultureInfo.InvariantCulture,
                    "An unexpected error was encountered, message with id {0} was put in error queue: {1}",
                    e.Message.Id,
                    success),
                ex);

        }
        finally
        {
            msmq.BeginPeek(TimeSpan.FromSeconds(double.Parse(ConfigurationManager.AppSettings["MsmqPeekTimeout"])), messageProcessor);
        }
    } 

你试过这个帖子的答案吗?是的,我试过这个解决方案,但没有成功!我的队列名称是小写字母,无法更改队列名称。您有权访问代码吗?能否将完整堆栈跟踪记录到日志文件中?我已更新代码,但没有完整堆栈跟踪。如果在每个步骤上添加“日志”,则代码可能未捕获异常。它可能是由发送方或e失败的;临时注释“if(mqe.messagequeueerrocode!=messagequeueerrocode.IOTimeout)”