为什么.NET Remoting服务器无法向Internet客户端发送事件

时间:2010-03-05 09:56:21

标签: .net remoting

如您所知,.NET Remoting有一些限制,其中之一是服务器无法通过NAT /防火墙向Internet客户端发送事件。

这是一个证据:http://social.msdn.microsoft.com/forums/en-US/netfxremoting/thread/6a91626a-3c44-45a1-b0f8-dbf4042f51e4/

今天,我有计划改进.NET Remoting,以便服务器可以向互联网客户端发送事件。我不深入研究.NET Remoting,所以我不知道.NET Remoting有这个问题的原因。任何人都可以给我一些解释吗?

我不知道是否可以解决这个问题?

请帮帮我。感谢。

2 个答案:

答案 0 :(得分:2)

.NET Remoting确实有其局限性,例如不同网络外的事件和外部客户端无法在不同网络内部访问服务器,因为使用套接字在网络上相互通信,因为序列化/ MarshalByRef对象的反序列化与网络本身联系在一起,因此无法通过防火墙在外部访问...而且它已经很老了,但有四种方法可以解决这个问题,尽管有workarounds到让事件到位......

  • 使用可以解决防火墙限制的第三方,例如DotNetRemotingGenuineChannels。曾经使用过GenuineChannels,有一些关于公司本身及其声音的问题,当我购买他们的组件时遇到麻烦,但是存在内部问题......第三方组件存在学习曲线,因为它没有跟随Remoting的正常惯例。事件处理机制功能强大并且确实有效,但是当Remoting附带.NET 1.1时,它违反了微软所规定的逻辑。
  • 我写了一篇关于CodeProject的文章,可能有助于解决Remoting框架的限制......通过将流量从外部IP地址重定向到内部网络...这可以帮助您绕过在您的情况下限制防火墙结构......
  • 修改Remoing框架的Mono源以删除限制并实现事件......但是AFAIK,MarshalByRef对象的序列化/反序列化存在一个障碍,因为它们与Remoting的序列化/反序列化不是100%兼容。
  • 与现代一起学习/使用WCF(Windows Communication Framework)取代旧的Remoting框架......

如果应用程序是遗留的,那么首先尝试使用我的流量重定向代码并检查它是否适用于您的情况可能是值得的...即发送/接收事件......

答案 1 :(得分:1)

.NET Remoting没有安全性或控制权,如果使用.NET远程处理,则期望所有系统都受到攻击。它应该只在一个进程中使用,以允许跨应用程序域边界通信。

而是使用WCF。 WCF提供能够跨越防火墙等的标准和自定义传输。当您从学习曲线开始时,从具有未来的东西开始。