Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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# 从客户端连接到信号服务器_C#_Asp.net Mvc_Signalr_Signalr Hub_Signalr.client - Fatal编程技术网

C# 从客户端连接到信号服务器

C# 从客户端连接到信号服务器,c#,asp.net-mvc,signalr,signalr-hub,signalr.client,C#,Asp.net Mvc,Signalr,Signalr Hub,Signalr.client,我现在有一个web服务器充当SignalR服务器,在这里,来自JS的连接进入正确的集线器并得到正确的处理 Register和start JS端的示例 hub = $.connection.webRTCHub; $.connection.hub.qs = "type=pusher"; $.connection.hub.start().done(function () { connectionId = $.connection.hub.id; log("Connected wi

我现在有一个web服务器充当SignalR服务器,在这里,来自JS的连接进入正确的集线器并得到正确的处理

Register和start JS端的示例

hub = $.connection.webRTCHub;
$.connection.hub.qs = "type=pusher";

$.connection.hub.start().done(function () {
     connectionId = $.connection.hub.id;
     log("Connected with id ", $.connection.hub.id);
});
当尝试使用C#SignalR Client Nuget包连接到此SignalR服务器时,我已连接,我已获得连接ID,但我认为我未连接到正确的集线器,因为未触发任何日志记录,也未向其余客户端发送正确的响应

我正在使用SignalR的跟踪日志,它显示连接,并显示ID正在连接。下面是C#客户端的连接代码

我也试过了

connection = new HubConnection("http://localhost/signalr/webRTCHub");


有人能告诉我从哪里开始的正确方向吗

我想您还没有创建任何自定义路由来处理信号机请求。您应该在没有任何url的情况下初始化HubConnection对象,该url将连接对象的url初始化为“/signal”作为默认值

connection = new HubConnection("");
或者只是

connection = new HubConnection();

我想您还没有创建任何自定义路由来处理信号机请求。您应该在没有任何url的情况下初始化HubConnection对象,该url将连接对象的url初始化为“/signal”作为默认值

connection = new HubConnection("");
或者只是

connection = new HubConnection();

确保您正在app start中注册集线器的路由,例如,如果您使用.NET core:

app.usesigner(路由=>
{
routes.MapHub(“/signal/hubs/webRTCHub”);
});
而类
webRTCHub
应该如下所示:

公共类webRTCHub:Hub
{
公共异步任务SendNotification(字符串用户ID、字符串消息)
{
等待Clients.User(userId).SendAsync(“接收通知”,“您有一条新消息:”+消息);
}
公共覆盖异步任务OnConnectedAsync()
{
等待base.OnConnectedAsync();
}
公共覆盖异步任务OnDisconnectedAsync(异常)
{
等待base.OnDisconnectedAsync(异常);
}
}
对于js方面:

“严格使用”;
无功连接;
connection=new signal.HubConnectionBuilder()
.withUrl('http://localhost/signalr/hubs/webRTCHub')
.build();
connection.on('ReceiveNotification',(message)=>{
//可能会显示消息
})
connection.start().catch(函数(err){
返回console.error(err.toString())
});
connection.on('finished',(update)=>{
连接。停止();
});
要将消息从客户端发送回服务器,您还应该在类中创建一个方法,并从脚本中调用该方法

更新:套餐和服务

对于ASP.NET:

NuGet软件包:

Microsoft.AspNet.signal

应用程序中映射路由\u启动

RouteTable.Routes.MapHubs(“/signalr/hubs/webRTCHub”,新的webRTCHub());
对于.NET核心:

确保在
ConfigureServices

Microsoft.AspNetCore.signal

public void配置服务(IServiceCollection服务)
{
// ...
services.AddSignalR();
// ...
}

确保您正在app start中注册中心的路线,例如,如果您使用.NET core:

app.usesigner(路由=>
{
routes.MapHub(“/signal/hubs/webRTCHub”);
});
而类
webRTCHub
应该如下所示:

公共类webRTCHub:Hub
{
公共异步任务SendNotification(字符串用户ID、字符串消息)
{
等待Clients.User(userId).SendAsync(“接收通知”,“您有一条新消息:”+消息);
}
公共覆盖异步任务OnConnectedAsync()
{
等待base.OnConnectedAsync();
}
公共覆盖异步任务OnDisconnectedAsync(异常)
{
等待base.OnDisconnectedAsync(异常);
}
}
对于js方面:

“严格使用”;
无功连接;
connection=new signal.HubConnectionBuilder()
.withUrl('http://localhost/signalr/hubs/webRTCHub')
.build();
connection.on('ReceiveNotification',(message)=>{
//可能会显示消息
})
connection.start().catch(函数(err){
返回console.error(err.toString())
});
connection.on('finished',(update)=>{
连接。停止();
});
要将消息从客户端发送回服务器,您还应该在类中创建一个方法,并从脚本中调用该方法

更新:套餐和服务

对于ASP.NET:

NuGet软件包:

Microsoft.AspNet.signal

应用程序中映射路由\u启动

RouteTable.Routes.MapHubs(“/signalr/hubs/webRTCHub”,新的webRTCHub());
对于.NET核心:

确保在
ConfigureServices

Microsoft.AspNetCore.signal

public void配置服务(IServiceCollection服务)
{
// ...
services.AddSignalR();
// ...
}

由于您使用的是.NET FW而不是.NET Core,因此应在服务器上配置集线器,如下所示:

启动时:

public void配置(IAppBuilder应用程序)
{
//将管道分支到此处以“/signalr”开头的请求
app.Map(“/signal”,Map=>
{
地图。UseCors(CorsOptions.AllowAll);
var hubConfiguration=新的hubConfiguration{};
运行信号器(HUB配置);
});
}
您使用的软件包:

Microsoft.AspNet.signal

微软,


然后,在客户端,FW和Core的情况相同,只需指向您的集线器。

由于您使用的是.NET FW而不是.NET Core,您应该在服务器上配置集线器,如下所示:

启动时:

public void配置(IAppBuilder应用程序)
{
//将管道分支到此处以“/signalr”开头的请求
app.Map(“/signal”,Map=>
{
map.UseC
using(var connection = new HubConnection("http://localhost/"))
{
  var hubProxy = _connection.CreateHubProxy("webRTCHub");
  hubProxy.On("yourevent", () =>
  {
    _logger.Debug("Event recieved");
  });

  await _connection.Start();
}