在VS 2019中工作。
我是SignalR的新手,我编写了集线器/客户端应用程序,使用两台IP地址不同的PC无法通过本地家庭局域网工作。
所以我回到基础知识并加载了示例聊天应用程序,但是我遇到了同样的问题。
我正在使用来自github here
的演示聊天示例PC A(我的工作PC)充当运行聊天集线器(192.168.0.2)的SignalR集线器。
运行“ Windows窗体示例”客户端(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
我已经尝试解决这一问题超过一天了,为什么不进行这项工作呢?
答案 0 :(得分:0)
回答我自己的问题...
我的用例有些不同。
我需要在Windows 10 PC上运行服务器集线器,该PC中心应具有不超过一打左右的本地(LAN)客户端(因此,它是所有本地LAN,没有云)。在这种情况下,Kestral似乎是服务器。
我了解到 IIS Express 仅处理 localhost 通信。
当我在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 run似乎可以在这种托管模式下工作。