【问题标题】:How to get a .Net Framework SignalR client to connect to .Net Core SignalR Server?如何让 .Net Framework SignalR 客户端连接到 .Net Core SignalR Server?
【发布时间】:2020-10-02 20:49:32
【问题描述】:

这基本上是这个问题的副本,但存储库已存档,所以我不能在那里问它: https://github.com/aspnet/SignalR/issues/1645

我正在尝试让运行 .NET Framework 的较旧应用程序连接到使用 SignalR 运行 .NET Core 的较新应用程序。 我读过一些帖子说 SignalR 的 AspNetCore 和 AspNet 版本不兼容,因此目标是让 Microsoft.AspNetCore.SignalR.Client 在 .NET Framework 应用程序上运行。 p>

我已经使用框架版本 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.'

有没有人有幸使用 SignalR 将 .NET Framework 应用程序连接到 .NET Core 应用程序,并且可以给我一些关于哪里出错的指示?谢谢

编辑:

我能够使用 VS 2019 将其安装到 4.6.1 项目中,但是当我尝试将其安装到 VS 2015 中的 4.6.1 项目中时,它给了我上述错误

【问题讨论】:

  • 您应该没问题,只需在 .NET 4.6.1 项目中添加对 nuget.org/packages/Microsoft.AspNetCore.SignalR.Client/3.1.8 的引用即可。如果失败,请发布确切的错误消息。请注意,您可能需要转到 .NET 4.7.2(甚至不再支持 .NET 4.6.1,没有理由使用它)
  • .NET 4.6.1 并不是真正的 .NET 标准。您应该真正使用 .NET Framework 4.7.2 或 4.8。
  • @CamiloTerevinto 感谢您的回复。我能够在 VS 2019 中将此包安装到 4.6.1 项目中,但是当我在 VS 2015 中创建 4.6.1 项目时,我仍然无法安装此包(我已经编辑了我的问题以显示错误)跨度>
  • @craigbot 查看您的 MSBuild 输出日志。我敢打赌,Microsoft.AspNetCore.SignalR.Client 的 NuGet 包不包含您项目的程序集。 NuGet 目前存在一个重大设计缺陷,当您安装一个未向目标项目添加任何程序集引用依赖项的包时,它不会阻止您(甚至警告您!)。
  • @Dai 很抱歉不明白,你的意思是在我的 VS 2019 项目中吗?在 VS 中构建时如何检查 MSBuild 日志?我用客户端进行了测试,它实际上在 2019 版本中做了我想要的(使用 SignalRConnection 类创建并连接到我的集线器),你认为还会有问题吗?

标签: c# asp.net asp.net-core signalr


【解决方案1】:

感谢 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 客户端

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多