在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 运行在这种托管模式下工作。