Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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设计问题-Web服务_C#_Asp.net_Web Services - Fatal编程技术网

C# ASP.NET设计问题-Web服务

C# ASP.NET设计问题-Web服务,c#,asp.net,web-services,C#,Asp.net,Web Services,创建一个web界面,这样我们的帮助台就可以创建用户并设置我们环境中使用的一些应用程序。web界面是用ASP.NET编写的,但我正在寻求关于实现后端的最佳方法的建议 我计划使用web服务创建帐户。我主要关心的是安全性和关注点的分离,所以我认为应用程序域是不够的 其思想是通过web服务请求获取信息,并在特权帐户下生成一个线程来执行实际工作。由于我们有其他系统,我们可能最终使用多个web服务 有人能看到这方面的问题或有更好的建议吗?你提出了一个合理的解决方案,但我可以想出一个替代方案。在ASP.NET

创建一个web界面,这样我们的帮助台就可以创建用户并设置我们环境中使用的一些应用程序。web界面是用ASP.NET编写的,但我正在寻求关于实现后端的最佳方法的建议

我计划使用web服务创建帐户。我主要关心的是安全性和关注点的分离,所以我认为应用程序域是不够的

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


有人能看到这方面的问题或有更好的建议吗?

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

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

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


通过这样做,您可以避免在ASP.NET应用程序中使用任何特殊的代码,并且在您的关注点之间有一个干净、独特的接口。如果任务失败,例如您正在设置的第三方应用程序处于脱机状态,则您有机会重试该操作。我发现这种方法也更容易监控。如果应用程序处于脱机状态,它还允许您继续接受传入的请求,而不会有太多困难。

谢谢Brian,这听起来是一个非常好的建议。线程用于模拟和长时间运行的任务,使用队列会更整洁。根据Brian的评论,我认为这可能是一种方法:ASP.NET Web UI WCF服务队列服务(流程任务)