【问题标题】:NetMsmqBinding WAS service fails to read messages from remote MSMQ queue in a workgroupNetMsmqBinding WAS 服务无法从工作组中的远程 MSMQ 队列读取消息
【发布时间】:2012-03-18 08:38:50
【问题描述】:

我们有一个使用 WAS 和 net.msmq 绑定托管在 IIS 中的服务。该服务从私有事务 MSMQ 队列中读取消息。我需要它通过从位于不同机器上的队列中读取服务来工作。如果队列在同一台机器上,我可以让它工作,但如果它在不同的机器上,就不行。

环境信息

  • 服务器运行的是 Windows Web Server 2008 R2。
  • 服务器位于工作组中,即它们不属于域。
  • 安装的 MSMQ 没有目录服务集成功能。
  • 我认为所需的 Windows 功能已安装(WCF 非 Http 激活和 Http 激活、消息队列服务器、多播支持、消息队列 DCOM 代理、Windows 进程激活服务、.NET 环境、配置 API)
  • 我在机器上进行了以下注册表更改:
    • NewRemoteReadServerAllowNoneSecurityClient = 1
    • NewRemoteReadServerDenyWorkgroupClient = 0
    • AllowNonauthenticatedRpc = 1
  • DTC 已启用,网络 DTC 访问、允许远程客户端、允许入站、允许出站、无需身份验证和启用 SNA LU 6.2 事务均已选中。
  • 已更改防火墙。

服务配置信息

  • 我们正在使用 netMsmqBinding。
  • netMsmqBinding 的传输安全模式为无。
  • ExactlyOnce 为真
  • UseActiveDirectory 为假
  • 耐用才是真的
  • 队列地址为 net.msmq://the-host-computer-name/private/EmailAsyncService

WCF 日志记录

  • 有一个警告:

无法检测队列是否为事务性”。错误中队列的 FormatName 为 DIRECT=OS:the-host-computer-name\private$\EmailAsyncService

  • 然后出现错误:

将 'the-host-computer-name\private$\EmailAsyncService' > 队列路径名称转换为格式名称时出错:无法识别的错误 -1072824300 (0xc00e0014)。排队通道上的所有操作均失败。确保队列地址有效。 MSMQ 必须在启用 Active Directory 集成的情况下安装并且可以访问它。

我尝试过的

  • 如果我手动创建和使用 MessageQueue 实例,我可以从服务所在机器上的远程队列中读取消息。
  • 我尝试将服务托管为独立的控制台应用程序。错误信息是一样的。
  • 我已尝试禁用相关的防火墙。
  • 我已尝试对http://msdn.microsoft.com/en-us/library/ms752246.aspx 进行更改,这些更改与在加入工作组的计算机上运行此类服务有关。 (“激活服务和工作进程都必须使用特定的用户帐户运行(两者必须相同),并且队列必须具有特定用户帐户的 ACL...在工作组中,服务还必须使用不受限制的令牌。”)我当前使用的用户帐户是网络服务。

一些想法

  • 我不认为存在防火墙或权限问题。
  • 尽管服务配置已将 UseActiveDirectory 设置为 false,但 net.msmq://the-host-computer-name/private/EmailAsyncService 的队列地址似乎正在转换为 the-host-computer-name \private$\EmailAsyncService,AFAIK 是一种名称格式,需要通过 Active Directory 进行查找。

【问题讨论】:

    标签: msmq was netmsmqbinding workgroup


    【解决方案1】:

    我来晚了一点,但由于您没有其他答案,我可能仍然可以提供帮助。

    您可能想尝试启用目录服务集成,因为我认为您需要使用证书才能在工作组模式下运行。

    此外,Juval Lowy 的 WCF 书清楚地表明,当您在 WAS 中托管服务时,您必须将队列命名为与 svc 文件的虚拟路径完全相同。因此,如果您的服务实际上托管在 /EmailAsyncService/EmailService.svc 中,那么这正是您需要为队列命名的内容(不带第一个斜杠)。

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2012-05-20
      • 2012-10-03
      • 2012-07-25
      • 1970-01-01
      相关资源
      最近更新 更多