【发布时间】:2012-02-28 22:19:22
【问题描述】:
我想在 Azure 中以辅助角色运行 WebSocket 服务器。
这在模拟器本地运行良好,但套接字服务器第一次运行时会出现 Windows 防火墙提示。
我想知道是否有人知道如何解决与 Azure 上的套接字有关的连接问题。
我的套接字服务器实现:OnStart
var server = new WebSocketServer("ws://theappname.cloudapp.net:8080/");
server.Start(socket =>
{
socket.OnOpen = () =>
{
Trace.WriteLine("Connected to " + socket.ConnectionInfo.ClientIpAddress,"Information");
_sockets.Add(socket);
};
});
.... etc
客户端实现:
var socket = new WebSocket("ws://theappname.cloudapp.net:8080");
socket.onopen = function () {
status.html("Connection Opened");
};
socket.onclose = function () {
status.html("Connection Closed");
}
加载页面几秒钟后状态变为closed。
我的工作人员角色端点如下:
WebSocket Input http 8080 <Not Set>
我现在尝试使用以下方法绑定到内部 IP 地址:
RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WebSocket"].IPEndpoint.ToString();
解决方案
为了其他人在 Azure 上实现 websocket 时遇到这个问题;
如果不在端口 80 或 8080 上,您的防火墙可能会拒绝您的连接,因此请为其创建单独的部署。
端点必须设置为 TCP 而不是 HTTP,才能创建正确的防火墙规则。 (见图)
【问题讨论】:
-
只是为了试用,你为什么不把你的输入端点从“http”更改为“tcp”协议。并将本地端口显式设置为 8080(在您的情况下为
)。此外,您必须记住,Windows Azure 负载均衡器会终止任何空闲超过 60 秒的连接。 -
@astaykov - 您的评论导致了解决方案,请在下面发布,以便我可以信任您。谢谢。
-
@astaykov 你有完整的实现吗?我正在努力让我的工作,以前从未这样做过。