Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与外部服务ASP.NET MVC同步_C#_Asp.net_Multithreading_Asp.net Mvc 3_Service - Fatal编程技术网

C# 与外部服务ASP.NET MVC同步

C# 与外部服务ASP.NET MVC同步,c#,asp.net,multithreading,asp.net-mvc-3,service,C#,Asp.net,Multithreading,Asp.net Mvc 3,Service,我们希望将应用程序中的数据与外部服务的数据同步。(例如会计软件。此同步应在每晚以及客户需要时执行 我知道长时间运行的线程不属于web应用程序,这种同步应该在外部windows服务中执行。但这种方法的缺点是,部署/维护变得更加困难,因为应用程序也可以安装在客户的web服务器上 是否可以将此同步完全集成到仅使用类库项目和“我的解决方案”中,该解决方案将在应用程序启动事件时启动?由于您的应用程序托管在IIS上,它由应用程序池进程维护。如果您为任务创建其他模块,它将在中运行同一个进程的上下文。你必须确保

我们希望将应用程序中的数据与外部服务的数据同步。(例如会计软件。此同步应在每晚以及客户需要时执行

我知道长时间运行的线程不属于web应用程序,这种同步应该在外部windows服务中执行。但这种方法的缺点是,部署/维护变得更加困难,因为应用程序也可以安装在客户的web服务器上


是否可以将此同步完全集成到仅使用类库项目和“我的解决方案”中,该解决方案将在应用程序启动事件时启动?

由于您的应用程序托管在IIS上,它由应用程序池进程维护。如果您为任务创建其他模块,它将在中运行同一个进程的上下文。你必须确保这个过程在半夜,当应用程序不被使用时,为了执行你想要的同步。你可以使用Qualth.NET来安排同步任务。

但是,我仍然认为更好的方法是从windows服务执行同步。服务应该与应用程序通信,例如使用数据库,在数据库中记录其当前活动。通过连接到这样的数据库,您可以从web监视服务状态。我知道服务强制执行一些附加操作您还可以从web应用程序(如果池进程用户具有windows服务的访问权限)添加服务启动的可能性,以克服(或至少最小化)在出现故障后重新启动服务时所需的管理工作

我已经编写了这样的功能,所以为了让您全面了解我所说的外部服务的web监控,请查看下面的屏幕。可以使用ajax支持编写此功能,以实现更高的响应能力(),这将方便最终用户


谢谢你的详细回答,我想我当时只能使用外部服务。不管你说你是通过db进行通信的,你不通过套接字进行通信有什么原因吗?而且,我来自PHP web开发人员,我很难理解asp.NET应用程序的生命周期。应用程序是在IIS中创建后启动的吗nd将永远运行,直到IIS关闭/重新启动?我主要担心的是,应用程序中的线程有限。由于10.000多名用户可以密集使用该应用程序,因此我不想为此同步牺牲任何性能。IIS上托管的应用程序只要与已定义的应用程序池连接的进程存在在IIS生命周期内。默认情况下,工作进程在关闭前将保持空闲。如果工作进程未处理请求且未收到新请求,则工作进程将处于空闲状态(检查空闲超时)。您还可以创建自定义http ping类型的工具,以防止工作进程变为空闲状态。此外,默认情况下,IIS会在一段时间后回收应用程序池(检查定期时间间隔)。因此,正如您所看到的,应用程序应该定期重新启动。回答第二个问题,为什么我使用db而不是socket进行通信?因为我已经准备好了数据库,并且我需要保留用户设置的一些同步设置,所以在这种特殊情况下,这是我的自然选择。我没有o使用MSMQ、套接字或WCF的对象。这取决于您需要什么。请检查有关进程间通信(IPC)的例如this:或this:主题。