gpt4 book ai didi

azure - 无法让简单的 SignalR Azure 辅助角色发挥作用

转载 作者:行者123 更新时间:2023-12-03 04:37:15 25 4
gpt4 key购买 nike

我正在尝试使用 SignalR、OWIN 和 Azure Worker Roles 建立一个简单的 WebSocket 服务器。

WorkerRole.cs:

public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
string url = "http://" + RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MyEndpoint"].IPEndpoint;
using (WebApp.Start<Startup>(url))
{
Trace.WriteLine(String.Format("Server running on {0}", url));
}

while (true)
{
}
}
/* ... */
}

启动.cs:

public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}

MyHub.cs:

public void Send(string name, string message)
{
Clients.All.addMessage(name, message);
}

端点“MyEndpoint”在服务中定义为 http、公共(public)和私有(private)端口 5001。

启动服务后,它在 Azure 计算模拟器下显示为在 5001 上运行。但是,如果我尝试连接到 ws://127.0.0.1:5001/signalr (或只是 ws://127.0.0.1: 5001)没有任何反应。为此,我使用了两个不同的 Web 套接字客户端(两者都是 Chrome 插件,并且使用其他 WebSocket 服务器都可以正常工作)。

问题:

1)我的设置有什么明显的错误吗?

2) 我是否需要使用 SignalR JS 客户端库来连接到 SignalR 服务器,或者任何实现 WebSocket 协议(protocol)的普通客户端都应该能够连接吗?

最佳答案

我知道这是一篇有点旧的帖子,但以防万一有人需要它......

1) 您需要解决两个问题。首先,Start方法位于:

    using (WebApp.Start<Startup>(url))
{
Trace.WriteLine(String.Format("Server running on {0}", url));
}

返回一个 IDisposable(因此使用 using(...){} block )意味着它在创建后立即被释放,因为执行继续通过 Trace.Writeline(...) 而没有暂停。

由于某些原因,在 Azure 计算模拟器下运行这些东西也有点棘手,主要是因为它会重新映射端口以避免冲突。如果您打开命令提示符并运行

    netstat -a

你会发现你有开放的端口(监听),看起来像这样(在我的例子中,我使用端口 81):

    TCP    127.0.0.1:82           MyComputer:0              LISTENING
TCP 127.0.0.3:81 MyComputer:0 LISTENING

在 Visual Studio 的常规控制台输出中,您很可能还会看到类似的内容

    "Windows Azure Tools: Warning: Remapping private port 81 to 82 in role 'MyRoleThingy' to avoid conflict during emulation."

这一切都意味着,为了使用辅助角色连接到您托管的服务器,您必须连接到端口 82 而不是 81(在您的情况下可能是 5002)。

2)如果你实现了该协议(protocol),我认为任何事情都应该有效。管理端口上的初始连接应该始终有效。

关于azure - 无法让简单的 SignalR Azure 辅助角色发挥作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19328378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com