socket常连接,使用windows服务启动会间隔2分钟断开一次。

爱的不落叶 2014-12-04 03:57:28
因为客户和环境需要,外网的服务器上需要访问内网主机上的数据库。我的方案是:内网服务器上启一个socket,与外网服务器保持常连接。外网服务器可以与内网服务器通信。内网服务器上的socket常连接通过控制台应用程序能保持常连接,但是通过windows服务启动常连接会每间隔2分钟断开一次。我已经使用心跳包保持连接活跃了,是否windows服务有什么机制会断开连接?
...全文
451 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱的不落叶 2014-12-05
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
没有什么机制给你断掉连接。 所有的服务程序,都应该可以同时用Conosle程方式执行,以便观察其在什么情况下会“垮掉”。而且要记录必要的日志。
嗯,今天突然莫名其妙就好了。所以我感觉应该跟服务也没多大关系,记录日志就是e.BytesTransferred <=0,估计是网络问题。 我看过好多你回复的帖子。。你帮我解决过好多问题,太感谢你了。。
爱的不落叶 2014-12-05
  • 打赏
  • 举报
回复
引用 9 楼 effun 的回复:
外网访问内网某个特定服务一般的做法是使用防火墙做NAT
嗯,主要是客户那边的局域网不归我们管,跟他们沟通还比较麻烦,能开个端口访问我们的服务器就已经很不错了。
爱的不落叶 2014-12-05
  • 打赏
  • 举报
回复
引用 8 楼 zhoumeiwen 的回复:
你可以先不用windows服务实现测试一下,我觉得应该和windows服务没有太多关系
不用windows服务,我用控制台应用程序启动服务是正常的,windows服务就会出现2分钟断开一次的情况。不过今天测试又正常了,莫名其妙……
  • 打赏
  • 举报
回复
没有什么机制给你断掉连接。 所有的服务程序,都应该可以同时用Conosle程方式执行,以便观察其在什么情况下会“垮掉”。而且要记录必要的日志。
effun 2014-12-05
  • 打赏
  • 举报
回复
外网访问内网某个特定服务一般的做法是使用防火墙做NAT
周美文 2014-12-04
  • 打赏
  • 举报
回复
你可以先不用windows服务实现测试一下,我觉得应该和windows服务没有太多关系
於黾 2014-12-04
  • 打赏
  • 举报
回复
其实用短连接,如果通信不是太频繁,也完全够用了 每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了 如果有请求,返回请求,那么客户端就可以先把请求的数据发过去,然后再断开
於黾 2014-12-04
  • 打赏
  • 举报
回复
其实用短连接,如果通信不是太频繁,也完全够用了 每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了 如果有请求,返回请求,那么客户端就可以先把请求的数据发过去,然后再断开
於黾 2014-12-04
  • 打赏
  • 举报
回复
其实用短连接,如果通信不是太频繁,也完全够用了 每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了 如果有请求,返回请求,那么客户端就可以先把请求的数据发过去,然后再断开
爱的不落叶 2014-12-04
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
而如果你的外网服务器跟内网服务器根本就不在一个局域网上,那么也只能自己做程序了 自己做服务,你首先要保证服务稳定,最好在服务器启动的时候就启动一个timer,timer里可以什么都不做,但是可以让系统认为服务在运行,而不是超时没有响应就自动关闭了
哎,要是这么简单就好了。一台外网服务器在电信机房,客户的服务器都是分布在不同的地方,不可能通过网线直接去连啊,我们的服务器想随时从客户的服务器上获取数据,但是客户的服务器没有公网IP,所以采用这种方式转发了。
爱的不落叶 2014-12-04
  • 打赏
  • 举报
回复
哎,要是这么简单就好了。一台外网服务器在电信机房,客户的服务器都是分布在不同的地方,不可能通过网线直接去连啊,我们的服务器想随时从客户的服务器上获取数据,但是客户的服务器没有公网IP,所以采用这种方式转发了。
於黾 2014-12-04
  • 打赏
  • 举报
回复
而如果你的外网服务器跟内网服务器根本就不在一个局域网上,那么也只能自己做程序了 自己做服务,你首先要保证服务稳定,最好在服务器启动的时候就启动一个timer,timer里可以什么都不做,但是可以让系统认为服务在运行,而不是超时没有响应就自动关闭了
於黾 2014-12-04
  • 打赏
  • 举报
回复
最简单的办法: 既然是服务器,肯定是多网卡的吧,外网服务器连一根网线到内网服务器,然后外网服务器的web程序也好,还是什么服务程序也好,就可以直接连接内网服务器的数据库了,而不要再通过自己做的什么不靠谱的服务程序去转

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧