2014-10-31 98 views
1

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

浏览器完全在我的处置,所以我可以配置是没有问题的。

例如,windows服务是一个文件检查器,当某个文件被改变时,必须弹出一个js警报。

CNC中

以下工作正常,客户端到客户端通信(服务器端代码)。 因此,当特定事件在服务器上发生了,我可以在客户端上显示这(我希望评论那样做)

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); 
      } 
     } 

    } 
} 
+0

我可以问的问题是什么你想解决(更大的问题不是调用JavaScript函数) – 2014-10-31 08:19:42

+1

发送数据到服务器,在服务器上处理这些数据,并将其发送回客户端以更新视图是慢的方法,所以我想说明它是在数据从服务器返回之前加载。 – 2014-10-31 08:39:41

回答

1

听起来像你所描述SignalR

什么是ASP.NET SignalR?

ASP.NET SignalR是ASP.NET开发人员 一个新库,使得它非常简单,实时网络 功能添加到您的应用程序。什么是“实时网页” 功能?它可以让您的服务器端代码实时地将 内容发送到所连接的客户端。

您可能已经听说过WebSockets,这是一种新的HTML5 API,支持浏览器和服务器之间的双向通信。 SignalR 将在可用的情况下使用WebSockets,并且 在其应用程序代码保持不变的情况下优雅地回退到其他技术和技术,而不是 。

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

你可以用ASP.NET SignalR做什么?

SignalR可用于将任何 类型的“实时”web功能添加到您的ASP.NET应用程序。 虽然聊天常被用作示例,但您可以做更多事情。 任何时候用户刷新网页以查看新数据,或者使用Ajax长轮询来检索新数据的页面,都是使用SignalR的 的候选人。

它所basicly呢,是给你访问到客户端和服务器端的功能在两个方向上,它的一个简单的例子是使用可以在asp.net website被发现,这将给你如何使用它是个好主意以及它有能力做什么。

+0

所以我在本地设置signalR,并以此方式连接到客户端。我会尝试一下。谢谢。 – 2014-10-31 09:26:53

+0

客户端到客户端和客户端到服务器通信正在工作,但现在我想从服务器向客户端推送'消息',并且我无法正常工作 – 2014-11-03 16:34:06

+0

在示例中显示了如何正确执行此操作? 'Clients.All.broadcastMessage(..,..)'部分? – Viezevingertjes 2014-11-04 08:21:28

0

你想使用像IR这样的东西来做到这一点,它的设计是什么,基本上你正在描述实时功能;

信号IR可以发现here并具有在JavaScript中的大段其wiki

尤其是你可能想看看Hubs