如何使 .Net Framework SignalR 客户端连接到 .Net Core SignalR 服务器?

7
这基本上是原问题的复制,但存储库已被归档,所以我不能在那里提问:https://github.com/aspnet/SignalR/issues/1645 我正在尝试使运行.NET Framework的旧应用程序通过SignalR连接到运行.NET Core的新应用程序。 我读到一些帖子说AspNetCore和AspNet版本的SignalR不兼容,因此目标是在.NET Framework应用程序上运行Microsoft.AspNetCore.SignalR.Client。
我使用4.6.1框架版本创建了一个测试项目,我认为它是.NET Standard 2.0,因此根据davidfowl的评论,我应该能够安装此程序包https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR.Client/1.0.0-preview1-final 我无法在我的4.6.1项目中安装此包,所以我一定做错了什么。

我还尝试了另一种解决方法,即使用Microsoft.AspNetCore.SignalR.Client v3.1.6代码创建一个netstandard2.0库,然后从我的4.6.1项目中引用.dll。

在我的netstandard2.0库中,3.1.6代码如下:

using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Concurrent;
public class SignalRConnection
{       
    private readonly HubConnection hubConnection;

    public SignalRConnection(string endpoint)
    {
        this.endpoint = endpoint;
        hubConnection = new HubConnectionBuilder()
         .WithUrl(endpoint)
         .Build();
    }
}

我通过进入4.6.1项目中的引用、右键单击、添加引用并选择我的netstandard2.0项目来进行参考。 我用以下代码在4.6.1中调用此代码:
class Program
{
   static void Main(string[] args)
   {
      SignalRConnection connection = new SignalRConnection("http://localhost:8080/status");
   }
}

我认为这可能是因为我没有使用1.0.0版本,所以我也尝试了那个版本。但是每个不同的版本都会出现相同的FileNotFoundException异常。

 System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.AspNetCore.SignalR.Client.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The system cannot find the file specified.'

Cannot load Microsoft.AspNetCore.SignalR.Client.Core

有人成功地使用SignalR将.NET Framework应用程序连接到.NET Core应用程序,并能否给我一些指针,告诉我我错在哪里?谢谢。

编辑:

Nuget SignalR error

我能够在使用VS 2019的4.6.1项目中安装此软件,但是当我尝试在使用VS 2015的4.6.1项目中安装时,出现了上述错误。

1
只需在.NET 4.6.1项目中添加对https://www.nuget.org/packages/Microsoft.AspNetCore.SignalR.Client/3.1.8的引用,您就可以正常使用了。如果失败了,请发布精确的错误信息。请注意,您可能需要升级到.NET 4.7.2(因为.NET 4.6.1已不再受支持,没有理由继续使用它)。 - Camilo Terevinto
.NET 4.6.1并不是真正的.NET标准。你应该使用.NET Framework 4.7.2或4.8才更合适。 - Dai
@CamiloTerevinto 感谢您的回复。我已成功将此软件包安装到VS 2019中的4.6.1项目中,但是当我在VS 2015中创建一个4.6.1项目时,仍然无法安装此软件包(我已编辑我的问题以显示错误)。 - craigbot
@craigbot 看看你的 MSBuild 输出日志。我敢打赌,Microsoft.AspNetCore.SignalR.Client 的 NuGet 包没有包含你的项目所需的程序集。目前 NuGet 存在一个重大设计缺陷,即当你安装一个不添加任何程序集引用依赖项到目标项目的包时,它不会阻止你(甚至不会警告你!)。 - Dai
VS2015非常老旧,不支持必要的NuGet更新以在最新版本的.NET Core上工作。您可以通过从nuget.org官方网站下载“NuGet.exe”,并手动使用该版本来解决问题,而不是使用随VS一起提供的版本。 - Camilo Terevinto
显示剩余3条评论
1个回答

4
感谢Camilo Terevinto为我解答此问题。 如果您使用的是VS 2019,则已经解决了此问题(只需使用nuget并安装即可)。
但是,如果您需要使用VS 2015,则由于nuget过时,它无法正常工作。
https://www.nuget.org/downloads安装最新的nuget.exe。
运行.\nuget.exe install Microsoft.AspNetCore.SignalR.Client -OutputDirectory C:\Projects\SignalR\ConsoleApplication1\ConsoleApplication1\packages
然后手动更新.csproj/packages.config中添加的软件包(请注意,我还需要将netstandard添加到我的项目中才能使其正常工作) 对于我的.csproj:
<ItemGroup>
    <Reference Include="netstandard" />
    <Reference Include="Microsoft.AspNetCore.SignalR.Client.Core, Version=3.1.8.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
        <HintPath>..\packages\Microsoft.AspNetCore.SignalR.Client.Core.3.1.8\lib\netstandard2.0\Microsoft.AspNetCore.SignalR.Client.Core.dll</HintPath>
    </Reference>
...

在安装此软件包时,会添加更多引用,因此请将它们全部添加(这里不添加所有引用,因为有20个以上)

然后对于您的packages.config文件执行相同操作:

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="Microsoft.AspNetCore.Connections.Abstractions" version="3.1.8" targetFramework="net461" />
...

完成后,我只需重新启动项目,就能使用SignalR客户端。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接