其他服务使用的Web服务消息

时间:2014-06-25 11:20:50

标签: wcf msmq appfabric

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

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

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

这项服务多年来一直运作良好,除了上周要求处理的约90%的文件因UnauthorizedAccessException而失败。

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

1 个答案:

答案 0 :(得分:1)

经过漫长无聊的周末搜索和黑客攻击各种不同的事情,包括:

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

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

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

我进一步的调查显示,用于服务默认网站的默认应用程序池也在执行我的WCF Web服务但无法访问文件服务器上的文件,因为用于运行默认应用程序池的标识没有权限失败所花费的时间少于成功的文件处理时间越长,我的服务越慢,默认应用程序池中的消息就越多。

原因

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

修复

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