C# 用于显示Windows服务进度的ASP.NET应用程序

C# 用于显示Windows服务进度的ASP.NET应用程序,c#,asp.net,wcf,windows-services,C#,Asp.net,Wcf,Windows Services,我有一个C#Windows服务和一个ASP.NET 4.0 web应用程序,目前它们彼此独立,托管在同一个网络中 Windows服务从数据库读取数据,并在每次调用时生成一个文本文件 我的意图是 a) 从ASP.NET应用程序调用Windows服务。 读了一点之后,似乎可以使用服务控制器类轻松地完成这项工作 b) 在客户端(浏览器)显示Windows服务的实时进度 我最初的想法是在服务中包含某种全局变量,然后远程asp.net应用程序可以访问这些变量,但我想知道最好的方法是什么。下面是一篇MSDN

我有一个C#Windows服务和一个ASP.NET 4.0 web应用程序,目前它们彼此独立,托管在同一个网络中

Windows服务从数据库读取数据,并在每次调用时生成一个文本文件

我的意图是

a) 从ASP.NET应用程序调用Windows服务。 读了一点之后,似乎可以使用服务控制器类轻松地完成这项工作

b) 在客户端(浏览器)显示Windows服务的实时进度


我最初的想法是在服务中包含某种全局变量,然后远程asp.net应用程序可以访问这些变量,但我想知道最好的方法是什么。

下面是一篇MSDN文章,介绍如何在Windows服务中托管WCF服务:

如何:使用TCP在Windows服务中托管WCF


凯文的上述回答似乎是个好主意。但是如果你真的想有一个不同的服务&没有wcf的页面

我不会选择将asp.net应用程序与windows服务捆绑在一起。相反,我会这样做

  • 从asp.net页面接受某种类型的命令,并将其输入到将侦听命令的服务中。这可以通过套接字或msmq消息等进行
  • 收到命令后,执行请求
  • 在执行过程中,使用COMET方法更新asp.net页面

为什么不让windows服务将其状态写入数据库表,然后让asp.net服务定期调用以读取此数据。那会简单得多吗?例如,如果服务崩溃怎么办?您的全局变量,甚至服务都将不可用,并且您将失去状态。您只是想获取Windows服务的“服务状态”,还是您的服务应该报告其他状态?我想报告确切的进度。例如,表中的记录总数和已处理的记录数。@collone_px-这样的共享状态通常需要持久化状态(如在dash建议的数据库中),或者您可以从Windows服务托管WCF服务以报告数据(我可能会选择此状态).我也投票支持WCF。检查状态与数据库进程是一个独立的问题。数据库不应被更改或以写访问权限打开,也不应承受写带宽的冲击。在Windows服务中实现WCF服务。这还可以确保ASP.NET应用程序可以在尽可能低的安全信任级别下运行,并且不需要访问数据库。简言之,它最小化了攻击面并将关注点分开。我大体上同意这一点。可能是通过MSMQ与Windows服务通信的标准IIS WCF服务?谢谢。在阅读了这里和其他地方的回复后,WCF似乎是一条出路。我要试试这个。