标签: asp.net-core-signalr

WPF SignalR 服务器

我真的很困难,需要一些帮助。我有一个 .NET Core 3.1 WPF 应用程序,它可以解码篮球记分牌数据,现在我需要将此数据发送到 .html 文件。.html 文件作为模板通过 CasparCG 服务器打开一次,并且需要以某种方式实时更新其数据。

我目前认为最好的方法是在 WPF 应用程序中拥有一个 SignalR 服务器和一个运行 SignalR 客户端的 html 模板。要求之一是我必须能够通过单击按钮来启动和停止 SignalR 服务器。

问题是,我完全不知道从哪里开始,因为关于在 WPF 应用程序上托管 SignalR 服务器的信息似乎很少。

c# wpf signalr .net-core asp.net-core-signalr

1
推荐指数
1
解决办法
2664
查看次数

如何测试托管在 Azure Appservice 上的 SignalR 应用程序(负载 + 功能组合)

如何测试托管在 Azure 应用服务上的 SignalR 应用程序(负载 + 功能组合) 我们正在构建一个 SignalR 应用程序,用于在活动和大会期间(实时)向观众进行问卷调查。我们预计有 1000-2000 个活跃并发用户的会话,这意味着大多数用户将同时连接。这会导致短时间内的重负载。我们想要模拟 x 个同时连接的唯一客户端。例如,1000 个用户在 30 秒内连接。语言和 signalR 包:该应用程序是使用 .NET Core 2.2 和 React 前端构建的。*SignalR 包 (.NET) Microsoft.AspNetCore.SignalR.Core (1.1.0) *SignalR 包 (npm) @aspnet/signalr (1.1.4) Azure 设置 我们正在使用 Azure SQL DB 的 Azure Appservice 上运行我们的应用程序。我们正在使用 Azure SignalR 服务,并将根据客户的需求进行扩展。

测试我们尝试使用Jmeter进行负载测试,并进行了GUI测试(使用Selenium进行小规模100-200个用户)。我们还运行了一个应用程序内测试,通过 JavaScript 循环创建集线器连接。但我们无法确保我们的应用程序能够在 1000-2000 个活动连接下运行。我的问题是如何测试这种类型的应用程序并确认它。我不可能是第一个构建这样的应用程序的人。

.net c# load-testing asp.net-core-signalr azure-signalr

1
推荐指数
1
解决办法
1万
查看次数

asp.net core 3.1 SignalR:将复杂对象从javascript客户端传递到Hub

我试图将一个对象从客户端传递到集线器:在客户端上:

connection.invoke('MyMethod', {
                i: 1,
                a: 25
            });
Run Code Online (Sandbox Code Playgroud)

在集线器上:

        public async Task MyMethod(TestModel model)
        {
            // logic
        }
Run Code Online (Sandbox Code Playgroud)

模型:

public class TestModel
{
    [JsonProperty("i")]
    public double Min {get;set;}
    [JsonProperty("a")]
    public double Max {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在 MyMethod 中,模型不为 null,但值始终为 0。

我做错了什么?

javascript c# signalr asp.net-core asp.net-core-signalr

1
推荐指数
1
解决办法
1793
查看次数

在 ASP.NET Core 中的 SignalR 中重新连接时重新连接到组

我有一些与 ASP.NET Core 中可用的 SignalR 相关的问题。作为 SignalR 的新手,我对这些问题不太有信心:

  • 根据这篇文章,可以在 ASP.NET SignalR 中重新加入组。ASP.NET Core 附带的 SignalR 中是否也存在相同的行为?
  • 如果客户端必须重新连接到 SignalR 集线器,是否Context.ConnectionId保持不变(这里的重新连接是指刚刚从非活动连接中恢复并且不更改到新网站)?

配置:

我使用的是 ASP.NET Core 3.1 和它附带的 SignalR 服务器版本 3.1.0。对于客户端,我使用 2 种客户端:.NET Core SignalR 客户端版本 3.0 和 Javascript 客户端 3.1.8。

asp.net-core asp.net-core-signalr

1
推荐指数
1
解决办法
1591
查看次数

Azure 应用程序服务中的 Signalr 不适用于 WebSockets

我有一个客户端(角度)应用程序服务和一个 api(net core 3.1)应用程序服务,我试图通过 signalr 相互通信。它在带有 websocket 的 localhost 上运行良好,但在 azure 应用程序服务上,它仅适用于长轮询传输模式,即使我在配置中启用了 websocket。协商返回 200 以及 connectionId 和所有三个可用传输。但是wss请求返回404,如下所示。

WebSocket connection to 'wss://xxxx.azurewebsites.net/notifications?id=ZI0-a_p5G6YziWhCxxc7Kg&access_token=eyJhbGc.. failed: Error during WebSocket handshake: Unexpected response code: 404 
Utils.js:218 [2021-03-25T18:21:13.045Z] Error: Failed to start the transport 'WebSockets': Error: There was an error with the transport.
Run Code Online (Sandbox Code Playgroud)

我尝试查看大量资源和文档来解决这个问题,因此我们将不胜感激。这是我的配置:

在startup.cs中

options.AddPolicy(MyAllowSpecificOrigins,
                    builder =>
                    {
                        builder.WithOrigins("https://xxxxx-dev.azurewebsites.net").AllowAnyMethod().AllowAnyHeader().AllowCredentials();
                        builder.WithOrigins("http://localhost:4200").AllowAnyMethod().AllowAnyHeader().AllowCredentials();

                    });

....

            services.AddControllers();
            services.AddSignalR();

....
           app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapHub<NotificationHub>("/notifications");
            });
Run Code Online (Sandbox Code Playgroud)

在客户端

import { HubConnectionBuilder } from '@microsoft/signalr';

....
    this.hubConnection = new HubConnectionBuilder()
    .withUrl("https://xxxx-dev.net/notifications",
      { …
Run Code Online (Sandbox Code Playgroud)

azure signalr .net-core asp.net-core-signalr azure-signalr

1
推荐指数
1
解决办法
2381
查看次数

对预检请求的响应未通过访问控制检查:响应中的"Access-Control-Allow-Credentials"标头的值为''

我,我正在使用angular 6和asp.net核心上的SignalR功能.但不断收到此错误对预检请求的响应未通过访问控制检查:响应中的"Access-Control-Allow-Credentials"标头的值为'',当请求的凭据模式为'时,该值必须为'true'包括'.

做了一些研究,发现它是服务器端的CORS问题.所以修改了服务器代码.

startup.cs

public void ConfigureServices(IServiceCollection services)
        {
    services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
                {
                    builder.AllowAnyOrigin()
                           .AllowAnyMethod()
                           .AllowAnyHeader()
                           .WithOrigins("http://localhost:4200");
                }));
     services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
         app.UseCors("CorsPolicy");
         app.UseSignalR(routes =>
            {
                routes.MapHub<SignalR>("/rule");
            });
}
Run Code Online (Sandbox Code Playgroud)

角应用

ngOnInit() {
this.callSignalR()
}

    private callSignalR(): void {
        // set up the signal R
        let connection = new signalR.HubConnectionBuilder().withUrl(environment.baseUrl+"/rule").build();
        //start the connection 
        connection.start().then(() => connection.invoke("updateRules", this.autheService.getCurrentuser.userId));
        //Get the response from the server
        connection.on("updateRules", data => {console.log(data);}); 
      }
Run Code Online (Sandbox Code Playgroud)

引用

Access-Control-Allow-Origin - Angular 5 …

c# asp.net-core angular asp.net-core-signalr

0
推荐指数
1
解决办法
1445
查看次数

ASP.NET Core SignalR 从任何地方访问 Hub 方法

如果在这个问题上花了很多时间,我发现了很多不同的策略,但没有一个对我有用。(此代码只是概念的证明。)

我使用 Asp.net core 2.1(在 .Net Framwork 4.7.2 上)进行了以下设置:

我制作了一个信号集线器,它有一种发送数字的方法:

using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;


namespace TestRandomNumberSignalR
{
    public class TestHub : Hub
    {
        public async Task SendRandomNumber(int number)
        {
            await Clients.All.SendAsync("ReceiveRandomBumber", number);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还创建了一个每 3 秒更新一个随机数并将其添加为单例的类:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace TestRandomNumberSignalR
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection asp.net-core asp.net-core-signalr

0
推荐指数
1
解决办法
2244
查看次数

模拟 Context.ConnectionId 以进行单元测试 Signalr .NetCore 消息中心

我的问题是,当我在 .Net CORE 中对 Signalr 集线器进行单元测试时,获取 context.connection ID 值插入我的方法之一。我的方法在我的测试类中如下所示:


    [Fact]
    public async Task TestWorkstationCreation()
    {
        Mock<IHubCallerClients<IWorkstation>> mockClients = new Mock<IHubCallerClients<IWorkstation>>();
        Mock<IWorkstation> mockClientProxy = new Mock<IWorkstation>();
        mockClients.Setup(clients => clients.All).Returns(mockClientProxy.Object);
        _workstationHub.Clients = mockClients.Object;
        await _workstationHub.RegisterWorkstation("WKS16", "Ready", new Dictionary<string, string> {{"OS", "Windows 10"}, {"Exam", "GRE, TOEFL"}});
        mockClientProxy.Verify(c => c.WorkstationRegistered(It.IsAny<WorkstationDataModel>(), It.IsAny<string>()), Times.AtLeastOnce);
    }
Run Code Online (Sandbox Code Playgroud)

在我的集线器类中,这是方法:

    public async Task RegisterWorkstation(string id, string status, Dictionary<string, string> capabilities)
    {
        _logger.LogInformation(
            "Registering a Workstation with id: {id}, status: {status}, and capabilities: {capabilities}",
            id, status, string.Join(",", capabilities));
        var workstationAdded = …
Run Code Online (Sandbox Code Playgroud)

xunit signalr .net-core asp.net-core asp.net-core-signalr

0
推荐指数
1
解决办法
2313
查看次数