我有一个与SignalR集成的WebSite。它运行良好,并且具有一个按钮,可将弹出通知发送给所有在线客户端。当我单击按钮时,效果很好。
我的API在另一个项目中,但在同一解决方案中。我想通过API端发送上述通知。基本上,移动应用程序将向API发送请求,然后API将向所有在线Web客户端发送通知。
下面的代码运行,并且不给出通知或任何错误。
这从根本上是正确的吗?感谢您的帮助
API代码(在WebAPI项目中)
[HttpGet]
public IEnumerable<string> WatchMe(int record_id)
{
GMapChatHub sendmsg = new GMapChatHub();
sendmsg.sendHelpMessage(record_id.ToString());
return "Done";
}
C#代码(在Web项目中)
namespace GMapChat
{
public class GMapChatHub : Hub
{
public void sendHelpMessage(string token)
{
var context = GlobalHost.ConnectionManager.GetHubContext<GMapChatHub>();
context.Clients.All.helpMessageReceived(token, "Test help message");
}
}
}
Home.aspx文件(在Web项目中)
var chat = $.connection.gMapChatHub;
$(document).ready(function () {
chat.client.helpMessageReceived = function (token,msg) {
console.log("helpMessageReceived: " + msg);
$('#helpMessageBody').html(msg)
$('#helpModal').modal('toggle');
};
}
答案 0 :(得分:1)
您不能直接呼叫该集线器。首先,您需要从nuget安装SignalR的.net客户端。然后您需要像这样初始化它:
[HttpGet]
public IEnumerable<string> WatchMe(int record_id)
{
using (var hubConnection = new HubConnection("your local host address"))
{
IHubProxy proxy= hubConnection.CreateHubProxy("GMapChatHub");
await hubConnection.Start();
proxy.Invoke("sendHelpMessage",record_id.ToString()); // invoke server method
}
// return sth. IEnumerable<string>
}
按请求打开一个新连接可能不是一个好主意,您可以按会话(如果使用)或静态或老式的方式进行连接。