2010-03-05 1 views
0

Как вы знаете, .NET Remoting имеет некоторые ограничения, один из которых - это тот факт, что сервер не может отправлять события интернет-клиентам через NAT/firewall.Почему .NET Remoting сервер не может отправлять события интернет-клиентам

Это свидетельствует: http://social.msdn.microsoft.com/forums/en-US/netfxremoting/thread/6a91626a-3c44-45a1-b0f8-dbf4042f51e4/

И сегодня, у меня есть план, чтобы улучшить .NET Remoting, так что сервер может послать событие интернет-клиентов. Я не изучаю .NET Remoting глубоко, поэтому я не знаю, почему .NET Remoting имеет эту проблему. Кто-нибудь может дать мне несколько объяснений?

И я не знаю, смогу ли я исправить эту проблему или нет?

Пожалуйста, помогите мне. Благодарю.

ответ

2

У .NET Remoting есть свои ограничения, такие как события и внешние клиенты за пределами другой сети, не могут получить доступ к серверу внутри сети в другой сети из-за использования сокетов для связи друг с другом в сети, поскольку сериализация/deserialization объектов MarshalByRef привязаны к самой сети и, следовательно, не могут быть доступны извне с помощью брандмауэра на месте ... И это довольно старо, однако есть четыре способа справиться с этим, несмотря на то, что есть workarounds, чтобы получать события в место ...

  • Используйте третью сторону, которая получает обойти ограничение брандмауэра, такие как DotNetRemoting или GenuineChannels. Использовали GenuineChannels, есть некоторые вопросы о самой компании и о ее звуке, в беде, когда я купил их компонент, но были внутренние проблемы ... Существует кривая обучения сторонних компонентов, поскольку она не следует обычные условные обозначения Remoting. Механизм обработки событий является мощным и работает, но он игнорирует логику, обозначенную Microsoft, когда Remoting появился с .NET 1.1.
  • Я написал статью о CodeProject, которая может помочь обойти ограничение фреймворка Remoting .. перенаправлять трафик с внешнего IP-адреса во внутреннюю сеть ..., что может помочь вам преодолеть ограничение брандмауэра структура в вашем случае ...
  • Измените источники Mono для рамки Remoting, чтобы удалить ограничения и реализовать события ... но AFAIK, есть проблема с сериализацией/десериализацией объектов MarshalByRef тем, что они не являются 100% совместим с сериализацией/десериализацией Remoting.
  • Go с современностью и узнать/использовать WCF (Windows Communication Framework), которая заменяет старую структуру Remoting ...

Если приложение наследство, он может быть стоит вашего времени, чтобы поэкспериментировать с моим движением сначала перенаправить код и проверить, работает ли он в вашем случае ... то есть, отправлять/получать события ...

+0

Пожалуйста, помогите мне выбрать наилучшее решение для решения этой проблемы в моем проекте. Все хорошо, за исключением того, что сервер не может отправлять события интернет-клиентам. Благодарю. –

1

. NET Remoting не дает БЕЗОПАСНОСТИ или управления, если вы используете удаленное выполнение .NET, ожидайте, что все ваши системы будут скомпрометированы. Он должен использоваться только в процессе, чтобы разрешить пограничную связь между доменами.

Вместо этого используйте WCF. WCF предоставляет стандартные и настраиваемые транспортные средства, которые могут пересекать брандмауэры и т. Д. Когда вы начинаете с кривой обучения, начинайте с чего-то, что имеет будущее.