C# Windows服务订阅Web服务器

10

我正在开发一个内部网站。所有用户都应该从Web服务器获得桌面弹出窗口,每当在网站上发布新内容时。

我想制作自己的Windows服务,该服务将订阅服务器(利用类似SignalR的东西),然后这个服务会显示一个简单的弹出窗口,通知用户每当服务器发送消息时。

但是,我想知道是否已经有这样的东西存在,而不是自己构建。我已经四处寻找,但没有找到任何信息。

我主要是一名Web开发人员,从未构建过Windows服务或C#桌面应用程序,因此我更喜欢使用现有的代码。

有人知道这样的东西吗?


你不必让它那么复杂。只需从 Windows 服务查询新条目或更改的数据,通过任务栏图标区域 - 服务图标在 Windows 中显示信息即可。 - kamokaze
你不需要使用Windows服务。只需创建带有“NotifyIcon”组件的标准Winforms应用程序即可轻松实现。从Windows服务中显示表单要么超级复杂,要么设计不良(当服务允许使用UI时)。 - TcKs
5个回答

2

如果要构建Windows服务,请尝试使用Top Shelf:http://docs.topshelf-project.com/en/latest/。总的来说,这很容易,只需要三个步骤...

public class TownCrier
{
    readonly Timer _timer;
    public TownCrier()
    {
        _timer = new Timer(1000) {AutoReset = true};
        _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is {0} and all is well", DateTime.Now);
    }
    public void Start() { _timer.Start(); }
    public void Stop() { _timer.Stop(); }
}

public class Program
{
    public static void Main()
    {
        HostFactory.Run(x =>                            
        {
            x.Service<TownCrier>(s =>                   
            {
               s.ConstructUsing(name=> new TownCrier());
               s.WhenStarted(tc => tc.Start());         
               s.WhenStopped(tc => tc.Stop());          
            });
            x.RunAsLocalSystem();                       

            x.SetDescription("Sample Topshelf Host");   
            x.SetDisplayName("Stuff");                  
            x.SetServiceName("Stuff");                  
        });                                             
    }
}

2
我正在开发一个内部网站。所有用户在网站上发布新内容时都应该从Web服务器获得桌面弹出窗口。
使用计时器不是一个好的技术,因为更新不保证在特定的时间间隔或会话中进行。但根据需要可以将其作为一种选项。
我想制作自己的Windows服务,订阅服务器(利用类似SignalR的东西),然后这个服务会显示一个简单的弹出窗口,通知用户每当服务器发送消息时。
是的,就像一个聊天应用程序,经常有消息,用户会得到一个弹出窗口。 {{link1:ASP.NET SignalR}} 是一个为ASP.NET开发人员设计的库,它简化了向应用程序添加实时Web功能的过程。实时Web功能是指服务器代码即时将内容推送到连接的客户端,而不是等待服务器请求新数据。

enter image description here

但是我想知道是否已经有类似的东西存在,而不是自己构建这个。我已经找了一些,但是没有找到任何东西。
参考资料:SignalR Link1,Link2,Link3

enter image description here

我主要是一个网站开发人员,从未构建过Windows服务或C#桌面应用程序,因此我更喜欢使用一些现有的代码。
制作C#桌面应用程序或Windows服务并不是什么大问题,因为您已经是一名程序员。一些现有的更新弹出窗口的代码可以在这里找到。

0

对于SignalR服务器端,我建议您使用C# Winform。

对于客户端,您可以在任何HTML文件中使用JavaScript来“接收”来自SignalR服务器的消息,然后可以弹出警报消息或其他任何您想要的内容。但是,在这种情况下,您必须确保用户在浏览器中浏览该HTML文件,否则消息将无法接收。

由于SignalR支持不同类型的服务器和客户端,因此没有现成的代码可用。我相信您需要编写自己的代码。实际上,SignalR非常容易使用,编写自己的代码可能比使用其他方法更快。


弹出窗口应该由服务显示,而不是从浏览器中显示。即使没有打开浏览器,用户也需要收到消息。 - Timon
在这种情况下,您可以为客户端构建服务,但是接收到的消息无法与您原始的内部网络网页进行交互。 - Kenneth Li
我知道,这没问题。我主要是在寻找已经能够做到这一点的东西(不需要使用SignalR,只需要能够订阅Web服务器并显示一个简单的弹出窗口,其中包含一些文本)。 - Timon
你知道Web服务器在没有接收到任何HTTP请求时是空闲的,因此我认为你需要使用其他技术来找到解决方案,例如SignalR、MSMQ、Socket连接,或者如果你的客户端支持推送通知,你可以简单地向客户端发送电子邮件。 - Kenneth Li


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接