【发布时间】:2011-07-12 18:52:17
【问题描述】:
我正在运行一个 Windows Azure 辅助角色,该角色在端口 1433 上公开 WCF 服务,该端口也被定义为输入 TCP 端点:
<InputEndpoint name="WcfServiceEndpoint" protocol="tcp" port="1433" />
同样的工作者角色还在 TCP 端口 443 上公开另一个服务,定义类似:
<InputEndpoint name="TcpInterfaceEndpoint" protocol="tcp" port="443" />
我在管理门户中看到两个端点,我能够正确连接到端口 443 上的 TcpInterfaceEndpoint,但我根本无法连接到另一个端口(从两台都能够访问的不同计算机上尝试过外部的 SQL 服务器,即未阻止传出连接的端口)。当我尝试在 Azure 实例上本地连接(通过远程桌面连接)时,telnet 连接正常。尝试从其他地方连接以“连接超时”结束。一切似乎都表明端口 1433 的处理方式与端口 443 的处理方式不同,并且在某处被防火墙阻止。我什至尝试在 Azure 实例上完全禁用 Windows 防火墙,但没有任何改变。
Azure 似乎不允许端口 1433 上的端点(通常是 MS SQL Server,由于测试环境中的防火墙限制,我们目前使用它),但我无法在任何地方找到有关此类限制的任何信息。那么——是这样吗,还是我在某处犯了一些小错误?
补充:我尝试了另一个测试:我在配置文件中切换了两个端口,因此 WCF 现在运行在 443 和 TCP 在 1433。而且,正如我所料 - WCF 服务可用,而 TCP 接口停止工作。我现在非常确信 1433 确实以某种方式被阻止了。最好在某处看到这些信息。
【问题讨论】:
-
1433 不应被计算防火墙阻止。 Brent S (brentcodemonkey) 有一个服务总线-sql 示例就是这样做的。您确定您的 WCF 已成功将自身绑定到该端口吗?它适用于本地结构吗?
-
嗯...只是为了好玩,我将一个工人角色推到了两个 mongodb 实例上——一个在 27017 上,一个在 1433 上。然后我 RDP 进入我的实例,同时查看两个 mongod 服务器日志。监听 1433 的那个从未收到连接请求。我还在实例的防火墙上明确打开了 1433。负载均衡器可能以不同方式处理这个众所周知的端口。就服务总线而言,它通过不同的端点,因此可能会有不同的处理方式。
-
只是好奇 - 你为什么试图在众所周知的 sql server 端口上挂起 wcf 服务?代理/路由器?
-
@David Makogon - 正如我所写的,这是因为我们测试环境中的防火墙限制。 (最终的生产部署将使用不同的端口,所以这对我们来说不是一个“阻碍”问题,只是一个麻烦。)
-
@Mormegil Ah - 错过了那个细节。