Windows服務MQ之拒絕訪問錯誤

來源:互聯網
上載者:User
設定兩個應用程式,應用程式A是Web應用,應用程式B是Windows服務。
A應用產生名為C的MSMQ(如果存在則引用C),並向C中插入記錄。
B應用產生名為C的MSMQ(如果存在則引用C),並從C中讀取記錄。
兩個應用和訊息佇列在同一台伺服器上。

兩個應用程式啟動時出現如下癥狀:
在C不存在的情況下。
當A應用先啟動,B應用再啟動時,正常。
當B應用先啟動,A應用再啟動時,A無法讀取C。出現拒絕訪問錯誤。而且Administrator手工也無法刪除C。

查看正常情況下和錯誤情況下的C的安全資訊。發現建立者不同。這個錯誤是許可權原因造成。

在建立或引用MQ的時候加入如下代碼(紅色部分)。
   MessageQueue mq=null;
   if(MessageQueue.Exists(@".\Private$\"+MQName)==false)
   {
    mq=MessageQueue.Create(@".\Private$\"+MQName,true);
    mq.SetPermissions("Everyone",MessageQueueAccessRights.FullControl);
   }
   else
   {
    mq=new MessageQueue(@".\Private$\"+MQName);
   }
   mq.Formatter = new BinaryMessageFormatter();

紅色部分的意思是,當應用程式是Asp.net應用時(WEB應用)-這時的使用者是ASPNET,系統預設建立的訊息佇列是Everyone完全控制的。如果是Windows服務或WinForm應用建立的-這時的使用者不是ASPNET是System或Administrator,系統建立訊息佇列是需要對Everyone賦權。

以上是針對Asp.net的情況,其他的Web應用在與Windows應用競爭MSMQ時也可以引用這種思路。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.