如何从Controller调用SignalR Core Hub方法?
我使用ASP.NET Core 2.0与Microsoft.AspNetCore.SignalR(1.0.0-alpha2-final).
我有与Excel,SolidEdge通信的Windows服务...当操作完成后,它会在ASP.NET核心应用程序中向我的控制器发送请求.现在我需要通过SignalR通知连接到服务器的所有客户端,外部程序完成了一些任务.
我无法改变窗口服务的工作方式.(无法从窗口服务连接到SignalR).
我为旧的SignalR(GlobalHost.ConnectionManager.GetHubContext)找到了很多解决方案,但是已经发生了很大变化,而且这些解决方案不再适用了.
我的控制器:
[Route("API/vardesigncomm")]
public class VarDesignCommController : Controller
{
[HttpPut("ProcessVarDesignCommResponse/{id}")]
public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
{
//call method TaskCompleted in Hub !!!! How?
return new JsonResult(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我的中心:
public class VarDesignHub : Hub
{
public async Task TaskCompleted(int id)
{
await Clients.All.InvokeAsync("Completed", id);
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在将一个项目从ASP.NET SignalR 2.2.3(OWIN)升级到ASP.NET Core SignalR 1.0.2(Kestrel).
SignalR 2.2.3支持多个客户双面一生的事件一样reconnecting,connectionSlow,stateChanged,....我们的javascript客户端使用这些事件并显示类似"重新连接"或"连接当前很慢"的内容.
是否存在或将存在ASP.NET Core SignalR中的等价物?到目前为止我只发现了两个终生事件:
let c = new signalR.HubConnectionBuilder().("/signalR");
c.connection.onClose(function(error) {});
c.connection.onReceive(function(data) {});
Run Code Online (Sandbox Code Playgroud)
我也看到了这个问题,但用户只询问了这个onClose事件.
不,我不是在寻找服务器端的终身事件.
好吧,因为根据文档和这个Github问题,没有重新连接(但是?),我对丢失Reconnecting和没有问题Reconnected.可是你知道connectionSlow,starting和stateChanged?
javascript signalr signalr.client asp.net-core asp.net-core-signalr
我正在尝试将参数添加到与signalr的连接中.
我正在使用Builder来创建我的客户端连接并启动它:
var connection = new HubConnectionBuilder()
.WithUrl("http://10.0.2.162:5002/connection")
.WithConsoleLogger()
.WithMessagePackProtocol()
.WithTransport(TransportType.WebSockets)
.Build();
await connection.StartAsync();
Run Code Online (Sandbox Code Playgroud)
我想在这个连接中发送一个简单的参数:类似于:
"令牌":"123"
在我的服务器端,我想我可以从HttpContext中获取此参数:
public override Task OnConnectedAsync()
{
var httpContext = Context.Connection.GetHttpContext();
var token = httpContext.Request.Query["Token"];
return base.OnConnectedAsync();
}
Run Code Online (Sandbox Code Playgroud)
知道怎么发送这个参数吗?谢谢.
我已经使用新发布的ASP.NET Core 2.1成功设置了SignalR服务器和客户端.我通过ChatHub扩展建立了一个聊天室Hub:每当有来自客户端的消息时,服务器就会通过它将其反弹回来Clients.Others.
我还不了解的是如何向客户端发送消息而不是作为对传入消息的响应.如果服务器正在工作并产生结果,我如何获得访问权限Hub以便向特定客户端发送消息?(或者我甚至需要访问Hub?是否有其他方式发送消息?)
搜索此问题很困难,因为大多数结果来自旧版本的ASP.NET和SignalR.
我已经为 REST API 设置了 Azure SignalR 服务。设置下共有三种模式:Default、Serverless、Classic。我找不到有关这些项目中的每一个设置的任何信息。到目前为止,我唯一得到的一件事是,如果我将 Azure SignalR 用于 Azure Functions 或 REST API,则最好使用Serverless option。
从文档:
仅当通过 Azure Functions 绑定或 REST API 使用 Azure SignalR 服务时,才将服务模式设置更改为无服务器。否则将其保留为经典或默认。
ASP.NET SignalR 应用程序不支持无服务器模式。始终对 Azure SignalR 服务实例使用默认或经典。
你能帮我找出每个选项的设置吗?
azure signalr asp.net-core-signalr azure-signalr azure-rest-api
当我在 Azure 上发布 Blazor 服务器端应用程序时,Visual Studio 会提示一条消息:
您的应用程序正在使用 SignalR。对于需要扩展的环境,我们强烈建议添加对 Azure SignalR 服务的依赖。
但是,我的应用程序可以正常工作,无需使用 Azure SignalR 服务。所以我想知道整合它是否真的有意义,或者这只是微软从我们口袋里多掏几美元的一种方式......
有没有人试过在有和没有 Azure SignalR 服务的情况下部署 Blazor 服务器端应用程序,以测试在性能方面是否有任何实际差异?我应该从中获得什么样的优势?
azure asp.net-core-signalr azure-signalr blazor-server-side asp.net-blazor
嗨,我正在使用角度应用程序连接到信号器,我正在使用"@ aspnet/signalr":"1.0.0-preview1-final".
我需要将connectionId发送到我的控制器(我需要做一些进程并告诉所有其他客户端但没有用户发出请求),问题是Connection Id是私有的,有办法获取连接ID吗?
当更新到最新版本的ASP Net Core和SignalR核心时,我注意到它们在向客户端发送方法时曾经有两种"发送"方法(曾经是InvokeAsync).
在查看代码注释之后,两个方法在注释中都是相同的,都继承自IClientProxy,并且都接受字符串方法,对象args和取消令牌.
这些方法有什么不同?如果有的话?什么时候应该使用?
为了通过SignalR从任何来源连接到ASP.NET Core 2.1服务器,我们必须按以下方式配置管道:
app.UseCors (
builder => builder
.AllowAnyHeader ()
.AllowAnyMethod ()
.AllowAnyOrigin ()
.AllowCredentials ()
)
Run Code Online (Sandbox Code Playgroud)
根据该文档,ASP.NET Core 2.2不再允许AllowAnyOrigin和AllowCredentials的组合,那么解决方案是什么?而SignalR Core始终在XMLHtppRequest中发送withCredentials:true。
我需要的是,从任何地方开始,无需证书,我们的用户都可以连接到SignalR集线器。
'错误:服务器超时已过,没有收到来自服务器的消息.'.
我正在尝试调试一些服务器端代码,而当我这样做时,客户端会在不到一分钟的时间内断开连接.
我只使用SignalR与客户端通信,而没有控制器.
是否有任何设置可以禁用超时或至少使它比现在更长?
我的launchSettings.json:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:26793",
"sslPort": 44386
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HTTPS_PORT": "44386"
}
},
"Api": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)