【问题标题】:Connect Signalr Hub and Client using different IP address使用不同的 IP 地址连接 Signalr Hub 和客户端
【发布时间】:2019-07-29 14:57:23
【问题描述】:

在 VS 2019 中工作。

我是 SignalR 的新手,我编写了集线器/客户端应用程序,但我无法使用不同 IP 上的两台 PC 在本地家庭 LAN 上工作。

所以我回到基础并加载了示例聊天应用程序,但我遇到了同样的问题。

我正在使用来自 github here 的 Demo Chat 示例

PC A(我的工作 PC)作为 SignalR Hub 运行聊天中心 (192.168.0.2)。

运行 Chat 'Windows Forms Sample' 客户端 (192.168.0.9) 的 PC B(我的笔记本电脑)

防火墙:我在两台 PC 上都允许端口 52995 的入站和出站规则。

集线器连接:

string ip = "localhost";
string port = "52995";

var url = new Uri($"http://{ip}:{port}/chat");

App.HubConn = new HubConnectionBuilder()
           .WithUrl(url, options =>
           {                   
           })
           .Build();

如果我在与集线器 (localhost) 相同的 PC 上运行 Winforms 客户端,则一切正常,但在笔记本电脑上,我得到的 错误 是:

System.Net.HttpRequestException. Response code does not indicate success: 400 (Bad Request)

为了清楚起见,Winforms 聊天客户端应用程序允许您在文本框中输入 url:

http://localhost:52995/chat   ----> client running on localhost   -> works
http://192.168.0.2:52995/chat ----> client running on 192.168.0.9 -> error

我已经尝试解决这个问题超过一天了,为什么这不起作用?

【问题讨论】:

    标签: signalr


    【解决方案1】:

    回答我自己的问题...

    我的用例有点不同。

    我需要在 Windows 10 PC 上运行服务器集线器,并且不超过十几个本地 (LAN) 客户端(因此它是所有本地 LAN,没有云)。 Kestral 似乎是在这种情况下使用的服务器。

    我了解到 IIS Express 只处理 localhost 流量。

    为了测试,我在 VitrualBox vm(用于服务器集线器)中运行 Visual Studio 的副本,这意味着 VS 使用的是 IIS Express,因此不允许 localhost 之外的流量,因此是 400。

    让它工作

    使用 CLI 启动网络应用程序 - 这将使用 Kestral 作为唯一网络服务器(通常 IIS 代理与 Kestral 之间的 http 流量)

    dontnet run <your app name>
    

    我还将托管模型设置为 OutOfProcess(在 csproj 中)

    <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
        <AspNetCoreHostingModel>OuOfProcess</AspNetCoreHostingModel>
    </PropertyGroup>
    

    虽然我不确定这实际上有什么不同,因为 dotnet run 似乎在这种托管模式下工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      相关资源
      最近更新 更多