【发布时间】:2024-04-16 19:25:02
【问题描述】:
编辑/摘要
经过大量的尝试和错误,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 URL 中使用 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 不起作用。当我在工作中使用网络时它可以工作,但在家里却不行。配置是一样的。一定和我的家庭网络有关。
另外,这是页面正常工作时的样子:
当它不工作时会发生这种情况:
【问题讨论】:
-
不是由 SignalR API 引起的,我不知道没有看到机器信息,但它可能是由 IP 版本引起的。你能证明 IP 版本吗?
-
IP 版本是什么意思? IPv4和IPv6?证明它们意味着什么?只是它们都是 IPv4 还是 IPv6?
-
我实际上想说错误不是由 SignalR 引起的,很可能是由网络引起的。可以尝试用加号代替星号。
-
对于否决这个问题的人,留下一些解释会有所帮助,以便 SO 像预期的那样运作,一个知识库......如果你不留下反馈,OP 如何改进对改善 SO 用户的问题?白痴。
-
当您从工作单位搬到家中时,您是否在 javascript 中更新
signalRUrl的值?我非常怀疑您的笔记本电脑的 IP 地址在两个位置是否相同。
标签: c# javascript asp.net networking signalr