2015-01-05 5 views
2

Ситуация: У нас есть веб-приложение, работающее на сервере. Это приложение должно извлекать данные с других ПК (клиентов), которые находятся в другой сети.Двусторонняя связь между сервером и клиентами

На ПК клиентов находятся 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 Я не могу понять, почему та ??

Скажите, пожалуйста, что лучше всего безопасный и быстрый способ справиться с этой ситуацией? какой подход я должен использовать?

ответ

0

Я работаю в свободное время с сокетами (правда, в C++, а не C#, но не должно быть разницы), и у меня никогда не было проблемы с подключением к клиентам за брандмауэром/маршрутизатором, даже без переадресации портов.

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

Излишне говорить, что я предлагаю программу сокетов. То, как я это вижу, это самый гибкий способ.

+0

программирования сокетов не работают, если клиент и сервер на разных сетевых .its работать только если обе в сети LAN. или оба на live IP.you знаете, если клиент за маршрутизатором, то у него нет статического IP.it IP всегда меняются. – Adam

+0

Только сервер должен перенаправить свой порт, если он находится за маршрутизатором, или порт открыт, если он находится за брандмауэром. Как еще будут работать все наши повседневные приложения? Skype, мессенджеры, даже веб-браузеры. В принципе, клиент подключается к серверу. После установления соединения клиент выбирает принимать пакеты. У маршрутизатора нет причин блокировать пакеты, так как клиент специально запрашивал информацию или ожидал информации. И, прежде всего, он знает, WHERE перенаправить входящий трафик. Извините, вы сказали, что это неправда. – xIcarus

+0

Ps, судя по другим комментариям к другим ответам, у вас, похоже, проблема с вашим шлюзом или чем-то подобным. Я не вижу другой причины, по которой ни один из ваших опубликованных методов не работал. Симптомы точно так же, как вы описываете: работает в lan, не работает через wan. Вы на 100% уверены, что настроены правильно? – xIcarus

4

SignalR, похоже, подходит для этого решения, потому что он является гибким. Он ведет переговоры о самом быстром доступном канале связи, и именно это вы ищите.

Вы должны изучить проблему с этим, и в конечном итоге будет работать signalR.

+0

Да, но, как я объясняю выше. signalR работать, если приложение веб-браузера на стороне клиента используется, его не будет работать, если использовать консоль или приложение win. – Adam

+1

SignalR будет работать в консольном приложении, посмотрите здесь: http://stackoverflow.com/questions/11140164/signalr -console-app-example –

+0

Хотя SignalR наиболее популярен для веб-приложений - он также может использоваться в консольных или настольных приложениях. Проверьте эту ссылку, например: https://code.msdn.microsoft.com/windowsdesktop/Using-SignalR-in-WinForms-f1ec847b –

0

Я использую SignalR для связи между серверами (C#), между серверами и мобильными приложениями (C#, Xamarin, iOS, Android). Серверы находятся в разных местах, а мобильные приложения могут быть где угодно. Все работает очень надежно.

Взгляните: http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host и здесь http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client

Смежные вопросы