【发布时间】:2013-12-28 17:42:03
【问题描述】:
我有一个托管在共享托管环境中的网站。对于该站点,我可以使用子域打开子站点。
我需要使用某种消息队列服务总线——当我的 ASP.NET 网站可以放置任务时,一台家用计算机(是的——家用计算机目前还可以)可以请求等待任务并执行网站的一些离线操作。
由于共享主机不支持 MSMQ、RABITMQ 或任何超出共享主机范围的技术(由于客户的预算,它必须保留在共享主机上 - 如果可以的话,我会移动它),我想知道是否有人知道我可以在站点的子域上安装某种嵌入式服务总线并向其添加任务,然后离线控制台应用程序将从该总线获取任务。
这样的事情存在还是我要求的太多了?
谢谢
【问题讨论】:
-
在 ASP.NET 中没有嵌入式服务总线应用程序之类的东西。此外,在 Web 应用程序中实现类似的东西是一个非常糟糕的主意:haacked.com/archive/2011/10/16/… 唯一可靠的方法是将它放在其他一些服务中(例如 Windows 服务)。如果您不想要一个完整的消息传递系统,一个简单的内存中(当然没有弹性)
ConcurrentQueue<T>可以很好地完成这项工作。 -
@DarinDimitrov 感谢您的回答。但是在内存中可能会出现问题,因为如果应用程序池回收,那么我将丢失所有任务。我需要一些简单的东西,能够保存任务并在以后检索它们(当然,一旦检索到任务,它就会被锁定以供其他检索)
-
但谁在谈论 AppPools?你看过我的评论吗?这些东西不应该托管在 ASP.NET 应用程序中。您应该为此任务提供单独的服务(例如 Windows 服务)。原因之一正是因为 AppPool 可以随时回收(不受您的控制),您将失去一切。因此,如果您不能使用真正的消息传递系统,或者至少有可能自己在单独的容器中实现一个,那么恐怕您将无法实现任何可靠的目标。
-
我看不出这样的事情不应该存在的理由。基本上,保存消息的东西和知道如何巧妙地检索它们的东西。
-
@grokky 遗憾的是没有。您可以做的最好的事情是使用 .NET 队列类 (msdn.microsoft.com/en-us/library/…)。如果需要持久化队列,可以将其包装在自己的代码中。
标签: asp.net .net asp.net-mvc-4 servicebus