修改/摘要
经过大量的反复尝试后,Paul Kearney-pk帮助我找到答案,虽然我仍然不知道为什么这种情况发生,至少我知道如何得到它工作。
快速摘要:当我在工作时直接连接到我的网络时,客户端可以连接到笔记本电脑上的端口8080。当我在家庭网络上时,客户端无法连接到端口8080。为了解决这个问题,我创建了一个防火墙规则(在我的笔记本电脑上)以允许8080上的入站流量。我真的很想知道为什么会这样。我的笔记本电脑的Windows防火墙服务是否真的根据我连接的网络更改其设置?
注意:当我在网络上工作时,这一切都有效,但它不能在我的家庭网络或其他人的家庭网络上工作。主机(我的笔记本电脑)在两个位置都是相同的。
我有一个使用SignalR的网络应用。 当我在与运行SignalR主机的机器上运行Web应用程序时,一切正常。当我尝试从其他计算机连接时,出现此错误:
> GET http://10.0.0.13:8080/signalr/hubs net::ERR_CONNECTION_TIMED_OUT. Cannot read property 'client' of undefined.
该错误来自我的index.html页面:
<script src="http://10.0.0.13:8080/signalr/hubs"></script>
根据我所做的研究,我知道我不应该在我的SignalR网址中使用localhost
。所以我使用了星号。这是我自己托管的SignalR应用程序:
class Program
{
static void Main(string[] args)
{
string url = "http://*:8080";
using (WebApp.Start(url))
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
public class RaceHub : Hub
{
public void Send(string name, string message)
{
Clients.All.addMessage(name, message);
}
}
这是我连接的JavaScript:
var signalRUrl = 'http://10.0.0.13:8080/signalr';
$.connection.hub.url = signalRUrl;
var hub = $.connection.raceHub; // proxy reference to hub
// Create a function that the hub can call to broadcast messages.
hub.client.addMessage = function (name, message) {
receiveSignalRMessage(name, message);
};
$.connection.hub.start(); // Start the connection.
就像我说的,这一切都在当地有效。但它并不适用于其他机器。我没有启用Windows防火墙,因此不是问题。有什么想法吗?
HTTPS无效。当我在网络上工作时,它可以工作,但不在家。配置是一样的。必须与我的家庭网络有关。
此外,这是页面工作正常时的样子:
这就是当它无法正常工作时发生的事情:
答案 0 :(得分:3)
(完全披露 - @BobHorn根据我的评论输入了这个答案)
您的计算机上有不同的防火墙设置,具体取决于您所连接的网络类型。
您是否注意到第一次连接到新网络时,它会要求您将其定义为&#34;工作,私人,公共,家庭等等?&#34;
您为该网络选择的任何内容都是粘性的,并且当您使用该类型的网络时,将应用相关的防火墙策略。
要检查这一点,您可以完全关闭防火墙,也可以确保所有防火墙配置文件的入站端口8080都已打开,尤其是&#34; home&#34;网络和/或家庭&#34;防火墙配置文件。
啊..所以你说你的Windows防火墙是关闭的。您确定它不仅仅为WORK网络配置文件关闭,而是为HOME网络配置文件启用了吗?
要解决此问题,我会将wireshark放在其中一台试图连接到家中的端口8080的客户端计算机上,并查看它是如何/为何被阻止或无法连接。
您还可以尝试从家中的客户端计算机telnet到端口8080(如果启用了Telnet客户端功能)。如果端口打开并且连接成功,或者大胖子被拒绝,您将立即知道。快速简便的测试。从命令行键入TELNET ServerIPAddress PortNumber。如果未找到Telnet命令,则需要在Windows功能/组件中打开Telnet客户端。
答案 1 :(得分:0)
您的网络是否使用IP安全性?您可以尝试使用HTTPS来查看是否可以缓解任何问题。
答案 2 :(得分:0)
看起来您的工作网络阻止了您的IP。尝试在工作网络中将家庭IP列入白名单。
答案 3 :(得分:0)
我认为这里的问题是你的笔记本电脑的IP地址从一个网络(即工作)变为另一个网络(即家庭),但你可能不会相应地更新javascript文件中signalRUrl
变量的值,因此您的应用程序的客户端正在寻找家庭网络上不存在的IP地址的集线器。
更改网络时,需要在javascript中更新signalRUrl的值,以反映主机的当前IP地址。