Asp.net mvc ASP.NET MVC后台服务处理
我们运行了许多ASP.NET MVC站点—每个客户端实例一个站点,服务器上大约有50个站点。每个站点都有自己的配置/数据库等 根据我们的维护计划,每个站点可能运行在稍微不同的应用程序版本上 目前,我们正在使用Quartz.net进行后台处理,它运行在网站的应用程序域中。这在大多数情况下运行良好,但显然会遇到一些问题,如appdomain关闭时(如长时间活动后)它无法运行 我们有哪些选项可以创建更强大的解决方案? 正在讨论Windows服务,但我不知道如何在IIS中获得的不同版本上实现相同的多站点Asp.net mvc ASP.NET MVC后台服务处理,asp.net-mvc,iis,service,Asp.net Mvc,Iis,Service,我们运行了许多ASP.NET MVC站点—每个客户端实例一个站点,服务器上大约有50个站点。每个站点都有自己的配置/数据库等 根据我们的维护计划,每个站点可能运行在稍微不同的应用程序版本上 目前,我们正在使用Quartz.net进行后台处理,它运行在网站的应用程序域中。这在大多数情况下运行良好,但显然会遇到一些问题,如appdomain关闭时(如长时间活动后)它无法运行 我们有哪些选项可以创建更强大的解决方案? 正在讨论Windows服务,但我不知道如何在IIS中获得的不同版本上实现相同的多站点
我真的希望每个IIS站点都有自己的后台处理,它总是像服务一样运行,但与IIS站点隔离的方式相同。您可以为每个客户端安装windows服务。不过,这似乎是一个维护难题 您还可以编写一个服务,了解应用程序的所有版本,然后逐个处理每个客户端
您还可以创建sql server作业来执行此操作,并为每个客户设置一个作业 我假设,正如您所提到的,每个客户机都有多个数据库。 为每个客户端创建带有db连接字符串的自定义配置文件 e、 g
编写一个windows服务,将上述配置文件(clients | connectiostring)加载到内存中,并遍历每个客户端数据库配置。我猜所有的客户机都有相似的作业队列基础设施,所以您可以对每个数据库执行相同的逻辑
您可以使用启动客户端的windows服务,以确保同一客户端的两个服务实例不会同时运行。但每个客户端的windows服务听起来不是很可扩展。SQL作业正在将域逻辑移动到应用程序外部。如果逻辑仍在IIS站点内部(通过rest/wcf等进行访问),则单个服务可能会工作。另外,请查看AppFabric,因为它似乎提供了一些合适的基础设施
<?xml version="1.0" encoding="utf-8" ?>
<MyClients>
<MyClient name="Cleint1">
<Connection key="Client1" value="data source=<database>;initial catalog=client1DB;persist security info=True;user id=xxxx;password=xxxx;MultipleActiveResultSets=True;App=EntityFramework" />
</MyClient>
<Myclient name="client2".....></MyClient>
</MyClients>