This Video之后,我实现了一个简单的SignalR.我在我的Program.cs类中添加了它的依赖项builder.Services.AddSignalR();.然后将 map 添加到我的CustomHub中,如下所示:app.MapHub<PublicChatHub>("public-chat");

这里是我的中心班级

using Microsoft.AspNetCore.SignalR;

namespace WebAPI.SignalR;

public sealed class PublicChatHub : Hub
{
    public override async Task OnConnectedAsync()
    {
        await Clients.All.SendAsync("ReceiveMessage", $"{Context.ConnectionId} connected.");
    }

    public async Task SendMessage(string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", message);
    }

    public override async Task OnDisconnectedAsync(Exception? exception)
    {
        await Clients.All.SendAsync("ReceiveMessage", $"{Context.ConnectionId} disconnected.");
    }
}

当我try 通过postman 连接套接字成功呼叫wss://localhost:7142/public-chat,但代码未命中OnConnectedAsync()上的断点时.

在连接后发送此消息:

{
   "protocol": "json,
   "version": 1
}�

�为0x1E ASCII.

推荐答案

postman 客户

对于我的主要问题,我无法通过postman通过网络插座访问我的集线器,我发现我的�实际上不是0x1E ASCII或类似的东西.在this link号上,我找到了一个和我的相似的身体模板,但结尾的字符不同.

使用以下内容更改了我的邮件正文:

{"protocol":"json","version":1}

(末尾应该是转义字符,无法发布,但您可以在顶部的链接上找到)

我的wss://localhost:7142/public-chat开始回应.


JS客户端

感谢Fatih,帮助解决了我的js客户端,运行时需要解决Live Servervscode扩展的问题,这就是CORS. 使用app.Cors();中间件作为服务解决了这个问题,这是

builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAll",
    configure => configure.WithOrigins("http://localhost:5500") // your client 
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials()
);
});

并使用策略作为中间件:

app.UseCors("AllowAll");
app.MapHub<PublicChatHub>("/public-chat");

对于运行Live Server扩展名的js客户端,我的代码是:

 let connection = new signalR.HubConnectionBuilder()
.withUrl("https://localhost:7142/public-chat") // your server (check out http or https request)
.configureLogging(signalR.LogLevel.Information)
.build();

connection.start().then(function () {
console.log("connected");
}).catch(function (err) {
return console.error(err.toString());
});

connection.on("ReceiveMessage", function (message) {
console.log("Message received: " + message);
});

并用简单的html页面调用它.

<head>
    <script src="https://unpkg.com/@microsoft/signalr@latest/dist/browser/signalr.min.js"></script>
</head>

<body>
    <script src="index.js"></script>
</body>

毕竟,我的客户波斯曼德和js都经营得很成功.

Csharp相关问答推荐

PredicateBuilder不是循环工作,而是手动工作

为什么我不能更改尚未设置的模拟对象属性的值?

读取配置文件(mytest. exe. config)

我需要两个属性类吗

在多对多关系上不删除实体

Mongo作为.NET中Testcontainers的副本集

ASP.NET Core AutoMapper:如何解决错误 CS0121调用在以下方法或属性之间不明确

Azure函数中实体框架核心的依赖注入

如何将此方法参数化并使其更灵活?

异步实体框架核心查询引发InvalidOperation异常

C#按名称从类获取属性值类型<;t>;,我需要反射吗?

在ASP.NET Core 8 MVC中本地化共享视图

在';、';附近有错误的语法.必须声明标量变量";@Checkin";.';

这是否比决定是否使用ConfigureAWait(False)更好?

C#使用相同内存的多个数组

如何在特定时间间隔运行多个后台任务?

使用SQL Server 2022+时,我是否必须将代码从SqlConnection类对象中迁移出来?

如何使ExecuteAsync异步运行

C#、Visual Studio代码、调试器、错误处理变量请求.未知错误:0x80131502,

GMap.NET中的暗模式映射