2011-06-05 70 views
2

创建一个Web界面,以便我们的服务台可以创建用户并设置我们环境中使用的一些应用程序,Web界面用ASP.NET编写,但我正在寻求建议实现后端的最佳方式。ASP.NET设计问题 - Web服务

我打算使用Web服务来创建帐户。我主要关心的是安全和问题的分离,所以我不认为应用程序域是足够的。

这个想法是通过Web服务请求获取信息并在特权帐户下产生一个线程来完成实际工作。由于我们有其他系统,我们最终可能会使用多个Web服务。

任何人都可以看到这个问题或有更好的建议吗?

+1

基于Brian的意见,我想这可能是要走的路:的ASP.NET Web UI <-> WCF服务<->队列<->服务(过程任务) – ServerMonkey 2011-06-06 01:41:31

回答

1

您提出了一个合理的解决方案,但我可以考虑替代方案。处理线程在ASP.NET应用程序中可能会很痛苦。不是不可能,而是痛苦。你是否在产生一个线程,以便你的任务可以在单独的身份下运行,还是因为任务可以长时间运行,或者两者兼而有之?需要考虑的另一件事是如何验证用户身份。您需要知道如何使用ASP.NET模拟其他用户帐户。

根据负载和其他因素,最好在应用程序中引入队列(在数据库中,或者使用MSMQ,Rhino队列或类似的程序)。当一个请求来验证它。如果可以,请将其转储到队列中,并将关联ID返回给客户端。客户端可以使用这个ID检查任务的状态。

您的队列可以存储在数据库中,或者您可以使用特定的排队API /系统。创建一个作为计划作业或Windows服务运行的独立应用程序。此应用程序可以从调用Web服务的客户机的独立标识下运行,并且可以在另一个线程上执行您的工作。当排队的工作完成后,数据库将更新为状态。

通过这样做,您可以避免在ASP.NET应用程序中使用任何特殊代码,并且在您的问题之间有一个清晰明确的界面。如果某个任务失败,说您正在设置的第三方应用程序处于脱机状态,那么您有机会重试该操作。我发现这种方法也更容易监控。如果应用程序处于脱机状态,它还可以让您继续接受传入的请求,而不会有太多困难。

+0

感谢布赖恩,这听起来像一个很好的建议。这些线程用于模拟和长时间运行的任务,使用队列将会更加整洁。 – ServerMonkey 2011-06-06 01:00:59