none
WCF在Internet环境下的CallBack问题 RRS feed

  • 问题

  • 最近开始学习WCF,对于WCF的双向通信有些疑惑,网上没有找到比较明确的答案,自己做相关实验又有难度,特向大虾们请教:

    前提条件:客户端与服务器之间通过 Internet 连接,客户端位于防火墙后,且没有公网IP

    那么服务器能否通过客户端的non public IP,并穿越防火墙实现对客户端方法的回调呢?如果可以的话ClientBaseAddress应该怎么设?防火墙也要开相应的端口吧?

    另外,在老外的论坛上看到有人建议在这种情况下使用NetTcpBinding,而不是WSDualHttpBinding,不知哪位有过实际体会:这两种方式是否可行,哪个更适合一些。

    这种环境在实际中较为常见,如果WCF能够方便的实现,那就太吸引人了。

    请各位大虾发表一下意见吧,谢谢!

    2010年5月7日 8:29

答案

全部回复

  • NetTcpBinding 传输会遇到问题,就是无法穿越防火墙,所以必须事先开启端口。
    WSDualHttpBinding 应该是更适合Internet 的方式。
    但是我也没在公网下测试过
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年5月8日 15:42
    版主
  • 多谢版主的答复!

    结合以上答复和我自己的理解:

    如果用NetTcpBinding的话,就需要开启服务器和客户端两边的防火墙端口(为了打开尽量少的端口,还需要想办法对客户端端口进行绑定),那么,即使客户端没有公网IP也可以进行通讯。

    如果用WSDualHttpBinding的话,相当于客户端也开了一个服务,因此如果客户端没有公网IP,服务器就没法定位客户端并实现回调。这种情况下,是不是用花生壳一类的动态域名解析软件,使服务器能够定位客户端就可以了呢?

    不知以上理解是否有问题,请版主指教!

    2010年5月10日 1:25
  • 个人理解,不是在客户端开了一个服务,而是在客户端与服务器之间建立一个长连接,服务器通过这个长连接来push数据.
    2010年5月10日 3:26
    • 已标记为答案 Mog Liang 2010年5月14日 7:41
    2010年5月11日 3:52
  • 谢谢楼上的答复。

    看了这两篇文章后,觉得清晰了不少。

    如果客户端采用Silverlight,PollingDuplexHttpBinding应该就可以达到目的了。

    如果客户端为普通应用程序,可以用“NetTcp+配置防火墙”或者实现一个自定义Channel,或者干脆轮询实现好了。

    2010年5月12日 1:18