Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个项目的API调用信号器-无错误或通知_C#_Api_Signalr - Fatal编程技术网

C# 从另一个项目的API调用信号器-无错误或通知

C# 从另一个项目的API调用信号器-无错误或通知,c#,api,signalr,C#,Api,Signalr,我有一个网站与信号集成。它的功能很好,它有一个按钮,可以向所有在线的客户端发送弹出式通知。当我点击按钮时,它工作得很好 我的API在另一个项目中,但在同一个解决方案中。我想通过从API端调用发送上述通知。基本上,移动应用程序将向API发送请求,然后API将向所有在线web客户端发送通知 下面的代码运行,不会发出通知,也不会出现任何错误 这基本正确吗?谢谢你的帮助 API代码(在WebAPI项目中) 你不能直接呼叫那个中心。首先,您需要从安装SignalR的.net客户端。然后您需要像这样初始化它

我有一个网站与信号集成。它的功能很好,它有一个按钮,可以向所有在线的客户端发送弹出式通知。当我点击按钮时,它工作得很好

我的API在另一个项目中,但在同一个解决方案中。我想通过从API端调用发送上述通知。基本上,移动应用程序将向API发送请求,然后API将向所有在线web客户端发送通知

下面的代码运行,不会发出通知,也不会出现任何错误

这基本正确吗?谢谢你的帮助

API代码(在WebAPI项目中)


你不能直接呼叫那个中心。首先,您需要从安装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>
}
[HttpGet]
公共IEnumerable WatchMe(int记录\u id)
{   
使用(var hubConnection=newhubconnection(“您的本地主机地址”))
{
IHubProxy=hubConnection.CreateHubProxy(“GMapChatHub”);
等待连接。开始();
Invoke(“sendHelpMessage”,record_id.ToString());//Invoke服务器方法
} 
//归还某物
}

每个请求打开一个新的连接可能不是一个好主意,您可以在每个会话(如果使用)或静态或时间模式下进行连接。

您可以附加到sendHelpMessage上的断点并调用api调用吗?非常感谢您的评论。是,当我调用API时,我通过sendHelpMessage方法调用。但它只是在它上面。没有例外或错误。只是路过。如果你打开了一个客户端,你应该能够跟踪一个跃点,你在电线上看到什么了吗?您可能需要启动调试器的两个实例。@RossBush是的,我运行了两个实例,它们在localhost的两个浏览器中打开(具有不同的端口)。尽管如此,它仍然没有在控制台中显示任何内容:(它甚至在它所在的服务器上都不工作。谢谢!我尝试了这个,但它没有到达我的“sendHelpMessage”类,该类位于另一个项目中。@Smug您不必访问该类。您需要连接该集线器,并且当您尝试从其他项目连接时,该集线器应该正在运行。了解。它仍然会通过。服务器端没有错误或反应。它不会弹出窗口,也不会在浏览器调试中显示任何日志。谢谢!您的答案是正确的等。我有第二个参数,它有一个默认值。不过,我必须传递一个值。我在那里挣扎。你上面的代码工作得很好。谢谢!
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");
        }
    }
}

var chat = $.connection.gMapChatHub;

        $(document).ready(function () {
            chat.client.helpMessageReceived = function (token,msg) {
                console.log("helpMessageReceived: " + msg);

                $('#helpMessageBody').html(msg)
                $('#helpModal').modal('toggle');
            };
          }
[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>
}