【问题标题】:web service messages consumed by other service其他服务使用的 Web 服务消息
【发布时间】:2014-06-27 20:32:05
【问题描述】:

我有一个 .NET 4.5 WCF Web 服务,它使用本地私有 MSMQ 队列中的消息,该队列在安装了 AppFabric 的 Windows Server 2008 R2 上运行。

此服务读取队列的消息并处理消息中引用的文件,我使用 AppFabric 来限制服务以处理 16 条并发消息,每个 AppPool 工作进程上 8 条。

AppPool 使用的域帐户对存储要处理的文件的网络共享具有完全权限。

这项服务多年来一直运行良好,但上周要求其处理的文件中有约 90% 因 UnauthorizedAccessException 而失败。

无论请求该服务从哪个文件服务器处理文件,该应用程序服务器上的所有服务都表现出此行为。即使是以前处理过的文件现在也失败了。

【问题讨论】:

  • 我有一个非常有趣的答案,但显然我不能发布它 8 小时,如果您有同样的问题,我们深表歉意。
  • 不,我的意思是有人在不发表评论的情况下对您的问题投了反对票,这是非常粗鲁的。但是,我赞成您的问题,使您的净问题得分为 0。期待您的回答。
  • 也许投反对票是因为标题描述了根本问题而不是描述的症状,我想我们永远不会知道

标签: wcf msmq appfabric


【解决方案1】:

经过漫长的周末搜索和破解各种不同的东西,包括:

  • 共享文件夹权限和配额
  • Windows 许可(CAL 等)
  • 防火墙
  • 网络应用的各种软件补丁

我最终偶然发现了实际问题,在重新部署 Web 应用程序时,我发现了一些奇怪的东西。当我通过 IIS 中的 WCF 菜单停止 Web 应用程序时,消息继续被消耗,所以我停止了停止运行 Web 服务的应用程序池,但消息继续被消耗,我虽然这可能是由于大延迟当大量消息回滚到毒消息队列时,分布式事务服务添加到 MQMQ 消息状态,所以我去吃午饭。当我回来时,消息仍在被消耗,并且进程资源管理器确认运行我的服务器的应用程序池不再执行。

显然有什么事情发生了,但不确定天气是否是原因、症状或巧合。关键是当我限制我的服务一次只处理一条消息以查看对共享的访问是否达到某种限制时,我注意到失败率上升到了 ~98%。这表明其他东西正在处理消息并失败,但也以只有我的应用程序可以的方式将这些失败报告到我的报告系统中。

我没有进一步调查发现,用于服务默认网站的默认应用程序池也在执行我的 WCF Web 服务,但无法访问文件服务器上的文件,因为用于运行默认应用程序池的身份没有特权失败比成功的文件进程花费的时间更少,因此我让我的服务运行越慢,默认应用程序池失败的消息就越多。

原因

当我在我的 Web 应用程序上调整限制时,我无意中设置了限制或作为 Web 应用程序父级的默认网站,我注意到了这一点,并将它们重置为默认值。我当时没有意识到的是,这已经在默认网站的 web 配置中添加了一个 <system.servicemodel> 标签。结果是我的默认网站开始表现得像一个 Web 应用程序,由于我还不明白的原因,它开始执行其子 Web 应用程序的功能,它可能与 WAS 激活有关,我所知道的是我肯定不是想要的行为。

修复

我从默认网站的 web.conf 中删除了 <system.servicemodel> 标记及其内容,并从其启用的协议列表中删除了 net.msmq,一切都恢复正常了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多