【发布时间】:2011-10-24 17:32:23
【问题描述】:
我有一个服务,它使用 WCF 通过端口 22 上的防火墙与另一个服务通信。该服务有大约 30 个作业,每 5 秒循环运行一次。这些作业基本上通过防火墙(传出)调用客户端上的服务,它所做的第一件事是检查配置以查看其是否有效。此设置在两对上运行,以实现冗余。
服务器----->WCF----->客户端(对 1)
服务器----->WCF----->客户端(对 2)
在第 2 对中发生的情况是标题中的一些例外,这些作业正在由服务器调用。重新启动服务对可暂时解决此问题,但一旦调用作业并针对客户端检查有效性,错误就会再次出现。有效性检查是为了安全而进行的,因此只有配置的作业才能在客户端上运行。请务必注意,这仅发生在某些工作上。
服务器上的日志文件显示了服务被调用的时间:
-[2011-10-24 12:35:43.726][INFO] 8268 CL:www.foo.com:启动新实例 - j63454750613。循环 #877
-[2011-10-24 12:35:43.726][INFO] 8268 CL: j63454750613: 检查服务器作业有效性...
-[2011-10-24 12:35:43.742][ERROR] 8268 CL: (evnt: 31975) j63454750613: 错误: 同步失败: 检查服务器作业时出错: The net.tcp://192.168.0.1:22/ServiceName/BufferedPoint 的服务器拒绝了会话建立请求。
-[2011-10-24 12:35:43.742][INFO] 8268 CL: j63454750613: 工作完成。
需要注意的是,服务调用发生在 Checking 作业有效性周期内,16ms 后服务抛出异常,但客户端日志中没有服务被调用的记录。
我进行了一些研究,微软技术人员表示,此异常的可能原因是下行链路缓慢、服务器太忙或端口 818 被阻塞。在我的例子中,下行链路是 100baseT,服务器是四核 4g 的内存,几乎不费吹灰之力,我们使用端口 22。
有什么想法可以在这里发生吗?我很乐意应要求提供更多详细信息。
干杯。
【问题讨论】:
-
“对”是什么意思?这是否意味着您在客户端上有两个服务暴露在同一个端口上?为什么要滥用为其他协议保留的端口 22?如果您需要这种奇怪的架构,在防火墙上打开端口应该是您应用程序安装过程的一部分。
-
22 端口是基础设施上唯一开放的端口,这个决定不是我做的。 4 个服务器、2 个客户端、2 个“服务器”中的每一个上都有一个服务。这些服务可以在一组服务器上完美运行,但不能在备份上运行;我们在那里发生了所描述的问题。
-
我所说的服务是某人编写的在服务器上运行的 Windows 服务。 Intranet 中的服务使用 WCF 通过端口 22 与 DMZ 上的服务通信。
标签: wcf nettcpbinding