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