无法让简单的 SignalR Azure 辅助角色正常工作



我正在尝试使用SignalR,OWIN和Azure Worker Roles来获取一个简单的WebSocket服务器。

工作人员角色.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、公共和专用端口 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 协议的原版客户端都应该能够连接?

我知道

这是一个有点旧的帖子,但以防万一有人需要它......

1)有两个问题需要解决。首先,启动方法在:

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

返回一个 IDisposable(因此使用 (...){} 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)如果你实现协议,我认为任何事情都应该有效。管理端口上的初始连接应始终有效。

相关内容

  • 没有找到相关文章

最新更新