我在网络上的两台计算机上运行了基于TcpClient
和TcpListener
的Windows服务。客户端和服务器节点都使用相同的Windows服务。该服务以Local System
运行,PC01
为Win7 x64,PC02
为Win7 x86。
应用程序在从客户端到服务器的连接尝试期间抛出SocketException
10060(连接超时),我发现应用程序的自动防火墙配置代码生成的Windows防火墙例外不是允许TCP流量通过。
退后一步,我在PC01
上按顺序尝试了以下测试,永久禁用PC02
上的防火墙,将其作为变量删除:
PC01
上禁用了防火墙 - 这很有效。PC01
上的防火墙并手动 添加了一个例外,以允许端口TCP
上的所有入站12345
流量 - 这都有效。myservice.exe
可执行文件来限制特定服务的例外 - 此失败。 当异常仅限于特定服务时,我的Windows服务是什么阻止它工作?我应该注意Windows服务的警告吗?打开所有服务的端口是唯一的解决方案吗?
编辑:我已使用netstat -a -n -b
收集有关活动连接和侦听端口的信息。以下摘录详细介绍了有关我服务的信息:
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:12345 0.0.0.0:0 LISTENING
[myservice.exe]
...
UDP 0.0.0.0:12344 *:*
[myservice.exe] (listening for UDP broadcast packets)
...
UDP 0.0.0.0:62794 *:*
[myservice.exe] (this is an outbound broadcast packet)
感谢大家提供的任何见解。
答案 0 :(得分:1)
为了选择要使用的特定可执行文件,可执行文件的路径必须与防火墙所期望的路径相匹配。显然,防火墙GUI由于某种原因正在转换路径,因此它相对于%USERPROFILE%
;我怀疑这构成了Windows中的一个错误。
(如果我没记错的话,防火墙一般可以处理使用环境变量的路径,例如%SystemRoot%
,但显然每用户环境变量不起作用,因为防火墙规则不会被评估在正确的用户上下文中。)