我在mvc4网络应用程序中使用SignalR。 我有一个继承自HUB的课程
[HubName("Chat")]
public class ChatHub : Hub ,IDisconnect
{
private void CallMessage(string message)
{
Clients.MessagesRecieved(message);
}
....
在我写的客户端js文件中 $(function(){ globalChatHub = $ .connection.chat;
$.extend(globalChatHub, { MessagesRecieved: function (data) {
alert(data);
}
});
问题是,
是否可以从我的HomeController.cs中的代码调用客户端脚本“MessagesRecieved function”
让我们这样说:
public class HomeController : Controller
{
public ActionResult Index()
{
// this is a test
ChatHub h = new ChatHub();
h.CallMessage("hellow");
}
答案 0 :(得分:1)
当然, 您可以像调用客户端代码一样调用它:
//Define the client method:
globalChatHub.hello = function {alert('hello');}
服务器代码中的只写:
ChatHub h = new ChatHub();
h.Client.hello();
方法的名称区分大小写。
此链接中的更多信息SignalR quick start
答案 1 :(得分:1)
您可以使用以下代码获得Hub
的{{1}}上下文:
ChatHub
然后您可以在var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
上调用您想要的任何方法,也可以直接调用客户端方法。 E.g:
ChatHub
试一试。希望这会有所帮助。
答案 2 :(得分:0)
在mvc控制器中,我使用以下代码来调用hub中的方法
DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver);
var hub = hd.ResolveHub("ChatHub") as ChatHub;
hub.Echo(HttpContext.Session.SessionID, "Hello Echo");
在集线器实现中,我更倾向于保持实现以调用Hub中的客户端以使代码具有内聚性。
public void Echo(string sessionId, dynamic data)
{
var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.ClientSideMethod(..)
}