从windows服务c#调用javascript函数

时间:2014-10-31 08:15:48

标签: javascript c# windows-services browser

我需要在用c#编写的windows服务中调用chrome窗口中的javascript函数。

浏览器完全由我自己处理,所以我可以配置没问题。

例如,Windows服务是一个文件检查程序,当某个文件被更改时,必须弹出一个js警报。

- 编辑 -

以下适用于客户端到客户端的通信(服务器端代码)。 因此,当服务器上发生特定事件时,我可以在客户端上显示此信息(我希望评论会这样做)

using System;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR.Client;
using SignalR.Hosting.Self;
using SignalR.Hubs;

namespace Net.SignalR.SelfHost
{

    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://localhost:8081/";

            var server = new Server(url);
            server.MapHubs();

            server.Start();
            Console.WriteLine("SignalR server started at " + url);


            Console.ReadLine();

           // Clients[collection].flush("bericht: " + message + collection);

        }

        //public void PushMessage(string bericht)
        //{
        //    var hubConnection = new HubConnection("http://localhost:8081/");
        //    var serverHub = hubConnection.CreateProxy("CollectionHub");

        //    serverHub.On("flush", message => System.Console.WriteLine(message));
        //    hubConnection.Start().Wait();
        //    serverHub.Invoke("Subscribe", "Product");
        //    string line = null;
        //    while ((line = bericht) != null)
        //    {
        //        serverHub.Invoke("Publish", line, "Product").Wait();
        //    }

        //    System.Console.Read();
        //}



        public class CollectionHub : Hub
        {

            public void Subscribe(string collectionName)
            {
                Groups.Add(Context.ConnectionId, collectionName);
                Console.WriteLine("Subscribed to: " + collectionName);
                //serverHub.Invoke("Publish", "dit is een eerste test", "Product").Wait();



            }

            public Task Unsubscribe(string collectionName)
            {
                return Clients[collectionName].leave(Context.ConnectionId);
            }

            public void Publish(string message, string collection)
            {
                Clients[collection].flush("bericht: " + message + collection);
            }
        }

    }
}

2 个答案:

答案 0 :(得分:1)

听起来像是在描述SignalR

  

什么是ASP.NET SignalR?

     

ASP.NET SignalR是ASP.NET的新库   开发人员可以非常简单地添加实时网络   应用程序的功能。什么是"实时网络"   功能?它能够推动服务器端代码   实时地向连接的客户端发送内容。

     

您可能听说过WebSockets,这是一个支持的新HTML5 API   浏览器和服务器之间的双向通信。 SignalR   当它可用时,它将使用封面下的WebSockets   优雅地回归到其他技术和技术时   不是,而您的应用程序代码保持不变。

     

SignalR还为服务器提供了一个非常简单的高级API   客户端RPC(在客户端浏览器中调用JavaScript函数)   来自ASP.NET应用程序中的服务器端.NET代码)   添加用于连接管理的有用钩子,例如连接/断开   事件,分组连接,授权。

     

您可以使用ASP.NET SignalR做什么?

     

SignalR可用于添加任何   有点"实时" ASP.NET应用程序的Web功能。   虽然聊天通常用作示例,但您可以做更多的事情。   用户刷新网页以查看新数据或页面时的任何时间   实现Ajax长轮询以检索新数据,是候选者   使用SignalR。

它基本上做的是,让您可以在两个方向上访问客户端和服务器端功能,可以在asp.net website上找到它的一个简单示例,这将为您提供一个好主意关于如何使用它以及它能够做什么。

答案 1 :(得分:0)

你希望使用像信号IR这样的东西,它的设计目的,基本上你描述的是实时功能;

可以找到信号IR here,并在其wiki

中有关于javascript的很棒的部分

特别是你可能想看看Hubs