Remoting服务器端如果服务器有多块网卡,多个IP地址的情况下会出现客户端callback失败的问题,debug以后发现客户端会callback到服务器端另外一个IP地址(例如外网地址,而不是内网地址)。大家知道一般情况下Remoting服务器端的配置方式如下:

<channel ref="tcp" port="55555">

或者用代码的方式:

IDictionary props = new Hashtable();
props["port"] = 55555;
IChannel channel = new TcpChannel(props, clientProvider, serverProvider);

该问题有几种解决方案:

1. 将Channel绑定到机器名(使用“machineName”),而非IP。但这样要求我们不同网段的客户都能通过同一个DNS名找到这个服务器。 而且使用此属性将覆盖useIpAddress属性设置。

<channel ref="tcp" port="55555" machineName="firewall.yourdomain.com" />

代码方式:

IDictionary props = new Hashtable();
props["port"] = 55555;
props["machineName"] = "firewall.yourdomain.com";
IChannel channel = new TcpChannel(props, clientProvider, serverProvider);

有关“machineName”属性的详细信息,请查阅MSDN:
http://msdn.microsoft.com/en-us/library/c5zztdc3%28VS.80%29.aspx

2.  为服务器每一个IP都开一个Channel,并使用“bindTo”。

有关bindTo属性的详细定义查看MSDN:specify an IP address of the NIC to bind
to when more than one NIC is installed in a machine. This attribute can
only be used in the server side.

配置示例:

<channel ref="tcp" port="55555" bindTo="197.118.137.8">
 <serverProviders>
   <formatter ref="soap" typeFilterLevel="Full" />
   <formatter ref="binary" typeFilterLevel="Full" />
 </serverProviders>
</channel>

3. 通过服务器端的Sink取得Client端的IP,并通过手动配置的类似路由表一样的对应表,通过客户端的IP来选择一个正确的服务器IP。

我们可以用 TrackingHandler在服务器端Marshal MarshalByRefObject的时候用一个正确的IP。

实现方法,参考张逸转载的这篇文章:http://www.cnblogs.com/wayfarer/articles/69104.html

最新文章

  1. CSS常见居中讨论
  2. linux源码分析(三)-start_kernel
  3. 多种姿势破解centos OR readhat enterprises 7.X root密码
  4. C#--异步显示工作进度
  5. oracle sql优化笔记
  6. 探索 OpenStack 之(9):深入块存储服务Cinder (功能篇)
  7. SqlParameter
  8. 使用RestTemplate Spring安全认证
  9. C++高精度运算类bign (重载操作符)
  10. JQuery基础 接下来我将把我最近学习jQuery所做的笔记发布,希望对初学者有些许帮助,也方便自己以后复习
  11. Redis分布式队列和缓存更新
  12. 01 Windows安装Tensorflow
  13. macbook air 2012 mid 安装 windows10 双系统遇到错误 no bootable device insert boot disk and press any key
  14. 关于“.bash_profile”和“.bashrc”区别的总结
  15. github issues的操作
  16. bolg迁移
  17. CSS之换行
  18. java 实用类
  19. Hibernate5笔记4--单表查询
  20. 【转】说下lua使用场景

热门文章

  1. Paper Reading 1 - Playing Atari with Deep Reinforcement Learning
  2. Kafka 快速起步
  3. Team Foundation Server安装指南(转载)
  4. ubuntu环境变量及其配置
  5. python--getattr函数
  6. Redis_发布订阅(Spring Boot)
  7. 标志位 last break
  8. git 删除github上的文件
  9. android studio - 修改logcat颜色字体
  10. 配置taglib的uri的2种方法