2012-11-10 62 views
0

我在我的mvc4 web应用程序中使用SignalR。 我有一个类从HUB从服务器调用客户端脚本 - SignalR

[HubName("Chat")] 
public class ChatHub : Hub ,IDisconnect 
{ 
     private void CallMessage(string message) 
     { 
       Clients.MessagesRecieved(message); 
     } 
     .... 

继承在我的客户的js文件我写 $(函数(){ globalChatHub = $ .connection.chat;

$.extend(globalChatHub, { MessagesRecieved: function (data) { 
    alert(data); 
} 
}); 

问题是, 是否有可能从我的HomeController.cs中的代码调用客户端脚本“MessagesRecieved功能”

让我们假设这样:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     // this is a test 
     ChatHub h = new ChatHub(); 
     h.CallMessage("hellow"); 

    } 

回答

1

当然, 你可以称它为你调用客户端代码相同的方式:

//Define the client method: 
globalChatHub.hello = function {alert('hello');} 

在服务器代码中这样写:

ChatHub h = new ChatHub(); 
     h.Client.hello(); 

方法的名称是区分大小写。在这个环节

更多信息SignalR quick start

1

你可以有一个在Hub上下文您ChatHub与此代码:

var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); 

然后,你可以调用任何你想方法对你ChatHub,或者你可以直接调用客户端方法。例如:

context.Clients.All.MessagesRecieved("test"); 

试试看。希望这可以帮助。

0

在MVC控制器,我用下面的代码来调用方法在枢纽

DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver); 
var hub = hd.ResolveHub("ChatHub") as ChatHub; 
hub.Echo(HttpContext.Session.SessionID, "Hello Echo"); 

在枢纽实现,我宁愿保持呼叫客户中心,以使代码凝聚力的实施。

public void Echo(string sessionId, dynamic data) 
{ 
    var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); 
    context.Clients.All.ClientSideMethod(..) 
} 
相关问题