使用不同的 IP 地址连接信令集线器和客户端



在VS 2019中工作。

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

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

我在这里使用来自 github 的演示聊天示例

电脑

A(我的工作电脑(用作运行聊天中心 (192.168.0.2( 的 SignalR 中心。

运行聊天"Windows 窗体示例"客户端的电脑 B(我的笔记本电脑( (192.168.0.9(

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

集线器连接:

string ip = "localhost";
string port = "52995";
var url = new Uri($"http://{ip}:{port}/chat");
App.HubConn = new HubConnectionBuilder()
           .WithUrl(url, options =>
           {                   
           })
           .Build();

如果我在与集线器(本地主机(相同的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

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

回答我自己的问题...

我的用例有点不同。

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

我了解到IIS Express只处理本地主机流量。

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

让它工作

使用

CLI 启动 Web 应用程序 - 这将使用 Kestral 作为唯一的 Web 服务器(通常是 IIS 代理进出 Kestral 的 http 流量(

dontnet run <your app name>

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

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

虽然我不确定这实际上有任何区别,因为似乎 dotnet 运行在这种托管模式下工作。

最新更新