为远程IIS应用程序池标识配置MSMQ专用队列权限

时间:2014-04-07 16:34:10

标签: c# asp.net msmq windows-server-2008-r2

我的设置

  1. ServerA使用本地IIS应用程序在IIS 7上运行Web应用程序 池身份。

  2. ServerB正在运行MSMQ,托管专用队列 我们打电话给MyQueue

  3. 在ServerB上使用消息队列管理单元,我已将MyQueue配置为向ServerA的域帐户(ServerA $)以及ANONYMOUS LOGON用户授予完全控制权

  4. 我想要发生什么

    我希望ServerA上的Web应用程序向ServerB上的MyQueue发送消息

    实际发生的事情

    消息从未出现在ServerB上,我没有收到任何错误消息。我已经启用了负面源日记功能,并且可以看到我正在访问“拒绝访问”#34;死信队列中的错误。

    如果我向所有人授予完全控制权,则会显示该消息,但我不想这样做。

    为什么我认为这会起作用

    article about IIS Application Pool Identities表示

      

    在域环境中使用网络服务帐户非常棒   效益。作为网络服务运行的工作进程访问网络   作为机器帐户。机器帐户是在机器上生成的   加入了一个域名。它们看起来像这样:

         

    domainname \ machinename $,

         

    例如:

         

    mydomain \ machine1 $关于这一点的好处是网络资源   像文件共享或SQL Server数据库可以进行ACL以允许此操作   机器帐户访问。

         

    申请泳池身份有哪些?

         

    好消息是应用程序池标识也使用该机器   帐户访问网络资源。无需进行任何更改。

    基于该信息,我假设在MyQueue上授予MY_DOMAIN \ _SERVERA $权限,那么事情应该有效。但他们不是。

    知道我做错了吗?

2 个答案:

答案 0 :(得分:3)

这个问题现在已经老化,但我已经设法使用ApplicationPoolIdentity用户从IIS应用程序查询MSMQ:

  1. 转到IIS管理控制台中的应用程序池列表,并记下所需应用程序的应用程序池名称
  2. 右键单击服务器管理器中的MSMQ队列> 属性> 安全
  3. 点击添加
  4. 输入对象名称IIS APPPOOL\{application pool name from step 1}。这应该自动完成应用程序池的名称
  5. 授予所需权限 - 通常这将是 Peek消息和/或接收消息
  6. 最好避免授予 Everyone 的权限。

    参考:https://serverfault.com/a/81246/24816

答案 1 :(得分:0)

我刚刚发现了这个问题并且在我的案例中找到了解决方案,如果我设置IIS作为网络服务帐户运行,远程队列将收到我结束的消息。

这已占用了我今天的很多时间,现在我需要解决一下如果运行IIS作为网络服务实际上是好的并且不会破坏其他任何东西。