从另一个项目的API调用SignalR-没有错误或通知

时间:2019-12-05 02:39:29

标签: c# api signalr

我有一个与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');
            };
          }

1 个答案:

答案 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>
}

按请求打开一个新连接可能不是一个好主意,您可以按会话(如果使用)或静态或老式的方式进行连接。