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

时间:2019-07-26 18:49:35

标签: signalr

在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

我已经尝试解决这一问题超过一天了,为什么不进行这项工作呢?

1 个答案:

答案 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似乎可以在这种托管模式下工作。