• 【原创】Mono 对于WCF Net.Tcp 支持问题


    项目背景:移植一个WCF Service 到 Linux 上,Mono版本: 2.10.6 (这里的Mono指的是Mono Run-time)

    问题: 以NetTcpbinding 为基础的 Service EndPoint 一直在通信有问题,客户端总是提示积极拒绝的错误。

    (详细问题见 http://stackoverflow.com/questions/13646692/wcf-service-on-linux-failed-to-communicate-with-client-on-windows-by-nettcp )

    解决:有两个问题, 在Mono2.1.0.6当前版本下,如果 服务端代码 服务器地址写 localhost,用netstat 查看,侦听地址总是127.0.0.1,所以外部无法访问,

    但是对于basichttpbinding来说,侦听地址就是0.0.0.0了,所以basichttpbinding 为基础的Service Endpoint 客户端能够访问。

    根据我上边那个链接所说的,需要升级Mono版本,可是 release版本当时只有2.10.9,似乎没有解决,所以我就干脆找了最后一个一个beta版本 3.0.2,

    没有对Ubuntu的build,只能自己下源代码编译并安装了(方法: http://opensimulator.org/wiki/Update_Mono_on_Ubuntu )

    这次看起来侦听地址正常了,但是客户端还是访问不了,最后还是在 Stackoverflow.com 上找到答案, 原来是侦听端口的问题,nettcp默认端口是808,

    但是好像在Linux下,系统会认为4000(尤其 1204)一下端口是不安全的,于是改为8080,通信正常!

    当然,顺便说下,两边的NetTcpBinding 安全类型要是 SecurityMode.None

    刚才升级mono只是一种解决方案,

    其实如果不升级Mono的话 ,服务端代码的地址要改成 当前服务器IP地址就也可以解决这个问题。(有可能会出现No such host is known的异常,我忘了怎么解决的)

    其实问题跟/etc/hosts文件有关,在我的Linux上,默认的hosts文件内容是这样的

    127.0.0.1 localhost.localdomain localhost
    127.0.0.1 at91sam9263_ek 

    (at91sam9263_ek 是主机名)。

  • 相关阅读:
    2020/5/8
    2020/5/8
    2020/5/6
    2020/4/30
    2020/4/29
    2020/4/28
    2020/4/27
    KMP算法详解
    博客搬家声明
    洛谷P2831 NOIP2016 愤怒的小鸟
  • 原文地址:https://www.cnblogs.com/successliwei/p/2827585.html
Copyright © 2020-2023  润新知