使用 Microsoft.AspNet.SignalR 2.4.3 的客户端与基于 Microsoft.AspNetCore.SignalR 6.0.1 构建的服务器之间的互操作性

问题描述 投票:0回答:1

我有一个基于 NET 4.8 构建的 ASP.NET 应用程序,其中包括使用 Microsoft.AspNet.SignalR 2.4.3 的 SignalR 客户端,并且我需要从 JS 调用使用 Microsoft.AspNetCore.SignalR 6.0.1 构建的 SignalR 服务器

服务器开发者提供的服务器URL是https://api.myservice.com/signalR/main,我需要调用一个方法名称JoinSession

服务器开发人员告诉我在没有集线器的情况下进行呼叫,但我不知道如何从 AspNet.SignalR 2.4.3 执行此操作。或者尝试使用“MainHub”作为集线器名称,但这不起作用。

我尝试了以下代码

let connection = j$.hubConnection('https://api.myservice.com/signalR/main');
let hubProxy = connection.createHubProxy('MainHub'); 

//Start the connection
connection.start().done(function () {
        // Call the server method
        hubProxy.invoke('JoinSession', uID, "mySession").done(function () {
            console.log('JoinSession successfully');
        }).fail(function (error) {
            console.error('Error invoking JoinSession: ' + error);
        });
    }).fail(function (error) {
        console.error('Error starting connection: ' + error);
    });

当我尝试此代码时,出现以下错误

GET https://api.myservice.com/signalR/main/signalr/negotiate?clientProtocol=2.1&connectionData=%5B%5D&_=1709211174237 404 (Not Found)  
Error starting connection: Error: Error during negotiation request

注意 SignalR JS 代码在我的 url 末尾添加的附加信号字符串

服务器开发建议我尝试这个

var connection = new signalR.HubConnectionBuilder()
  .withUrl("https://api.myservice.com/signalR/main")
  .build();

// Start the connection
connection.start().then(function () {
  //...
})

但这不起作用,因为 AspNet.SignalR 2.4.3 中没有方法 HubConnectionBuilder

我该怎么办? 如何从 2.4.3 AspNet SignalR 客户端调用 6.0.1 AspNetCore SignalR 服务器?


一些附加信息 客户端应用程序本身也在客户端和后端之间使用 SignalR。

SignalR 在启动时配置如下(以允许客户端大小直接与后端交互

<Assembly: OwinStartup(GetType(SignalRConfig))>
Public Class SignalRConfig
  Public Sub Configuration(app As IAppBuilder)
    app.MapSignalR("/signalr", New Microsoft.AspNet.SignalR.HubConfiguration())
  End Sub
End Class

然后从本地客户端我可以访问本地 SignalR 服务器代码

// init SignalR MapAssetID client
let tmHub = null;
try {
    tmHub = j$.connection.tmHub;
} catch (e) {
    console.error('Cannot access SignalR tmHub')
}

稍后我可以使用SignalR

if (tmHub) {
  tmHub.client.updateMapAssetID = _updateMapAssetID;
  j$.connection.hub.start();
}

这一切都很好

我怀疑我可能需要向 SignalRConfig 类添加一些额外的配置,以使客户端与远程 AspNetCore 服务器正确交互,但我不知道要查找什么以及在哪里查找。

signalr signalr.client asp.net-core-signalr
1个回答
0
投票

简短的回答,你不能一起使用它们。 CORE 版本是重写的。您可以通过此问题在此处查看更多信息。

SignalR 版本兼容性(状态代码:405 '方法不允许')

© www.soinside.com 2019 - 2024. All rights reserved.