我将服务器接到防火墙的外面,就什么问题都没有了,既能从外部访问服务,也能从内网访问服务。但明显我的服务器是不能接到防火墙外部的。而且将服务器放到防火墙内部时,HTTP等高层TCP服务都运行正常,就是Remoting中的TcpChannel不能正常运行。请高手指点!

解决方案 »

  1.   

    TcpChannel chan = new TcpChannel(5525);
    ??
      

  2.   

    这种情况下简单使用应该没有问题,建议先跟一下Server对象是否建立成功(应该是成功的),或者调用Remoting Object的一些简单方法(obj.ToString())。
    只有在Remoting Object的方法参数或者返回值里面包含了其它MarshalByRefObject的时候才会出错。
      

  3.   

    你走HTTP协议试试:
    在服务器端再加入: IChannel httpChannel = new HttpChannel(6595);
    ChannelServices.RegisterChannel(httpChannel);TcpChannel chan = new TcpChannel(5525);
    ChannelServices.RegisterChannel(chan);
    Type serviceType = Type.GetType("DigitalCampus.ModuleServices");
    RemotingConfiguration.RegisterWellKnownServiceType(serviceType,"moduleServices",WellKnownObjectMode.Singleton);
      

  4.   

    要进行远程调用的对象必须继承自MarshalByRefObject或间接继承自MarshalByRefObject
      

  5.   

    TO: qqchen79(知秋一叶 [MS MVP]) 我的方法参数和返回值中只有如下几种类型的数据:
    string int enum 和 DataSet如果TcpChannel中也只能使用简单数据类型才能穿越防火墙的话,那不是与HttpChannel和Web Service就没有什么区别了么?
      

  6.   

    其它的MarshalByRefObject对象不是不能用,只是需要特殊的配置。因为在CAO环境下服务器应该返回firewall的IP作为CAO对象的URL而不是内网IP。但是如果你的调用方法只有简单类型作为参数和返回值,那多半是服务器或者firewall的设置有问题了。你可以照我前面说的那样调用一些简单的方法(ToString()),然后再服务器端用vs.net调试,看看调用究竟有没有正确传递到服务器端(设断点)。
      

  7.   

    TO:  qqchen79(知秋一叶 [MS MVP]) 的确没有什么问题,原来是程序设计有一点小小的错误,引起的外网不能访问!
    谢谢!