Ситуация: У нас есть веб-приложение, работающее на сервере. Это приложение должно извлекать данные с других ПК (клиентов), которые находятся в другой сети.Двусторонняя связь между сервером и клиентами
На ПК клиентов находятся WCF
, размещенные в Windows Services
, используя свои местные Sql db
. Я хочу сделать дуплексную связь между сервером и клиентами для обмена данными друг с другом. общий ресурс данных обмена данными, набор данных, строка и т. Д. Между клиентами и сервером.
Проблема:
1) Я не имею никакого контроля над брандмауэром, прокси-сервер, NAT на стороне клиента ПК. В основном компании Employee PC имеют множество сетевых защит, например, брандмауэр блокирует ICMP-трафик и некоторый порт, некоторые могут быть отключены от перенаправления портов и т. Д., Клиент может изменить место в сети. Я не хочу делать какие-либо настройки на стороне клиента Маршрутизатор, прокси-сервер, брандмауэр. во время общения, как я могу справиться с такой проблемой на стороне клиента? как вы знаете, скайп работает идеально в этой ситуации.
брандмауэры часто блокируют входящие подключения к клиентам; клиент может быть недоступен с сервера, он может использовать трансляцию NAT за маршрутизатором, поэтому с ним нельзя связаться без настройки перенаправления портов на маршрутизаторе и некоторой новой переадресации портов с маршрутизатором.
2) На стороне клиентов нет IIS.
Я не хочу разрешать удаленный доступ к ПК клиентов.
Существует более 100 клиентов и только один сервер. одному серверу необходимо обмениваться данными со многими клиентами в разных сетях.
3) С одной стороны мое клиентское приложение использует оконное приложение и wcf, размещенное в окне службы, Другая сторона на моем сервере Я использую веб-приложение. поэтому его средняя связь между настольными ПК и веб-ПК, это проблема.
Если оба приложения используют веб-приложение, то это не было проблемой для дуплексной связи. Потому что я знаю, что WEBRTC подходит там lol.
технологии, которые я уже проверить и найти Issue
WSDualHttpBinding: Не работает, если клиент за NAT. проверить это для деталей click here
MSMQ: его плохой метод, если клиенты больше, чем 1 и производительность проблема также из-за его использования памяти RAM. проверьте здесь click here
Xsocket: Его также не будет работать, если блокировать трафик ICMP от брандмауэра на клиенте.проверьте здесь click
WebRTC: Его работа хорошо, но его поддержка веб для веб-коммуникации .в моей стороне клиента я имею выиграть приложение.
Socket.io: Его необходимо установить Node.js и многие другие вещи, трудно реализовать, так как мне нужно реализовать на применении существования, я не делаю новое приложение.
C# Оправа Программа: его не будет работать, если клиент за NAT.check здесь click for detail
реле Service Bus: Ее не бесплатно даже для тестирования.
socketPro: Я изучал я считаю его хорошим, но я не могу найти правильный образец на Google .so, что я мог проверить это.
Подлинное каналы: Я не могу найти образец на google.
Позволяет увидеть проблему с SignalR.: На стороне сервера я запускаю консольное приложение и клиентскую часть. Я запускаю два приложения, одно из которых - консоль и другая сеть. когда я запускал консольное клиентское приложение, чем оно не инициировало соединение с сервером, но когда я пользовался веб-клиентским приложением, он работал нормально. образец link is SignalR two way communication Я не могу понять, почему та ??
Скажите, пожалуйста, что лучше всего безопасный и быстрый способ справиться с этой ситуацией? какой подход я должен использовать?
программирования сокетов не работают, если клиент и сервер на разных сетевых .its работать только если обе в сети LAN. или оба на live IP.you знаете, если клиент за маршрутизатором, то у него нет статического IP.it IP всегда меняются. – Adam
Только сервер должен перенаправить свой порт, если он находится за маршрутизатором, или порт открыт, если он находится за брандмауэром. Как еще будут работать все наши повседневные приложения? Skype, мессенджеры, даже веб-браузеры. В принципе, клиент подключается к серверу. После установления соединения клиент выбирает принимать пакеты. У маршрутизатора нет причин блокировать пакеты, так как клиент специально запрашивал информацию или ожидал информации. И, прежде всего, он знает, WHERE перенаправить входящий трафик. Извините, вы сказали, что это неправда. – xIcarus
Ps, судя по другим комментариям к другим ответам, у вас, похоже, проблема с вашим шлюзом или чем-то подобным. Я не вижу другой причины, по которой ни один из ваших опубликованных методов не работал. Симптомы точно так же, как вы описываете: работает в lan, не работает через wan. Вы на 100% уверены, что настроены правильно? – xIcarus