服务端
builder.Services.AddSignalR();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapHub<GraphGenerationHub>("/file");
});
public class GraphGenerationHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
注入
private readonly IHubContext<GraphGenerationHub> _hubContext;
public DemoController(SqlSugarClient _db,IHubContext<GraphGenerationHub> hubContext)
{
db = _db;
_hubContext = hubContext;
}
发消息
await _hubContext.Clients.All.SendAsync("ReceiveMessage", siz+"%");
前端
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.7/signalr.min.js"></script>
<script>
var messages = [];
// 创建 SignalR 连接
var connection = new signalR.HubConnectionBuilder()
.withUrl("http://localhost:8081/file")
.build();
// 注册事件处理程序
connection.on("messageReceived", function (message) {
console.log(message);
});
// 启动连接
connection.start()
.then(function () {
console.log("SignalR connection started.");
})
.catch(function (err) {
console.error(err.toString());
});
弄得比较简单 但是就是不通
http://localhost:8081/file/negotiate?negotiateVersion=1 前端页面一打开就报这个跨域 我也配置跨域啥的 而且这个都没有对应的路由
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.7/signalr.min.js"></script> 这个引用也不行 可是能打开
我都提取放到文件里还报这个
巧了,我们也用的ABP的Signalr,等我下次上班我给你找找
我没用abp 就简单的在本地做了个demo 接口没问题 就Signalr报错
http://localhost:8081/file/negotiate?negotiateVersion=1
这个地址是signalr的协议协商链接,前后端在通信前会通过该连接协商协议。然后才开始正式通信。
@echo_lovely:
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapHub<GraphGenerationHub>("/file");
}); 这定义的吧
@echo_lovely: 为什么会跨域呢
@缘—: 这个8081你配置了吗?appsettings.json里配置,前端,后端,跨域
@echo_lovely: 我配置的所有 都允许
@echo_lovely:
我看F12提示发起请求的域是'null', 你是不是打开的本地html才跨域的..把网页也放服务器,通过localhost打开网页试试看呢
我开启 httpserver
iis是80811
我又配置了个策略 还是不行
上传没问题 这是实时返回不了 报凑
@缘—:
两处标记,看看是不是都在
@MrNice:
@MrNice:
是不是要在Hub上加上跨域的注解属性:EnableCors("allcore"),光是在接口上配置的跨域不会在Hub上生效?