【发布时间】:2013-10-11 22:43:09
【问题描述】:
我正在尝试使用 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)
{
}
}
/* ... */
}
Startup.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 Compute Emulator 下显示为在 5001 上运行。但是,如果我尝试连接到 ws://127.0.0.1:5001/signalr(或只是 ws://127.0.0.1: 5001) 没有响应。为此,我使用了两个不同的 Web 套接字客户端(都是 Chrome 插件,并且它们都可以使用其他 WebSocket 服务器正常工作)。
问题:
1) 我的设置有什么明显的问题吗?
2) 我是否需要使用 SignalR JS 客户端库连接到 SignalR 服务器,或者任何实现 WebSocket 协议的普通客户端都可以连接?
【问题讨论】:
-
在尝试使用另一个 Web Socket 框架 (XSockets) 后,在 WebRole 中运行时没有任何代码可以工作(但作为控制台应用程序工作),我开始认为这有一些问题了解 Azure DevFabric 如何处理网络通信。有谁知道 Azure 是否在网络方面做了一些有趣的事情,可能会干扰 Web Socket 通信?端点在那里,它们出现在 Compute Emulator 中,但我似乎无法连接到它们。
标签: azure websocket signalr azure-worker-roles