2010-03-30 3 views
1

Я пишу вам из-за новой проблемы, которую мне нужно решить, и теперь я слишком сильно ударяю головой о стену.Создание приложения с ограниченным доступом к серверу в C#

В принципе, мне нужно создать приложение, которое может позаботиться о следующем:

пользователь запускает приложение, которое отправляет широковещательный подсети, обеспечением и получает ответ от всех серверов там с их IP (и дополнительная информация). Затем пользователь может выбрать сервер, к которому он хочет подключиться.

Выполнение этой работы достаточно просто, с идентификацией подсети и широковещанием с UDP, а затем с другим серверным приложением, получающим его и отправляющим ответ. Проблема заключается с этими ограничениями, что мне нужно принять во внимание:

  • Там, скорее всего, также будет клиентов на серверах в сети, а это означает, что мы можем предположить, что приложение присутствует на всех машинах. На каждом компьютере должен быть запущен слушатель, и каждый компьютер может запустить графический интерфейс для выбора сервера.
  • Мне остается только добавить одно исключение из брандмауэра - исключение, которое обрабатывает как отправку трансляций, получение трансляций, отправка ответов и получение ответов.
  • Я должен добавить только одну службу Windows
  • на серверной машине, слушатель должен работать как служба Windows, поэтому пользователь этого не заметит. Пользователь также не замечает, что ответ отправляется обратно клиенту.
  • На клиентской машине пользователь может запустить приложение, которое уведомит приложение о передаче широковещательной передачи и получит все ответы сервера, поэтому пользователь может выбрать один для подключения.
  • Помимо приложения, которое пользователь запускает для выбора сервера, не должно быть никакого взаимодействия с пользователем. Даже не всплывающее окно с запросом пользователя, чтобы разрешить трафик корыта брандмауэр - все это должно быть автоматически
  • Он должен работать и между Win XP, Win Vista и Win 7.

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

У меня есть несколько идей, - мне просто нужно, чтобы выяснить, как это сделать:

  • Должен ли я сделать все в одно приложение, что я могу добавить в список исключений брандмауэра, поэтому он будет заботиться о трафик как на сервере, так и на клиентских машинах?
  • Должен ли я добавить настраиваемое исключение из брандмауэра, разрешая трафик UDP на конкретном порту, а затем весь поток трафика?
  • Есть ли третий и лучший вариант для управления этим?
  • Это нормально, чтобы служба работала как на клиентских, так и на серверных машинах. Но может ли он позаботиться обо всем для меня - как он обрабатывает передачу и получение трансляции, и ответ отправляет/получает? И есть ли способ извлечь информацию о серверах в сети из службы?

Я знаю, что это много, но я очень надеюсь, что вы сможете мне помочь.

сообщите мне, если я не был достаточно ясен или вам нужны дальнейшие объяснения.

Я кодирую в C# .Net, и я могу использовать все, что я хочу, из инфраструктуры .Net. Как только я эта функциональность реализована

Все лучшее

/Sagi

ответ

0

Возможно, сервер и клиент UPnP могут быть решением вашей проблемы?

+0

Я также рассмотрю это - спасибо за ваш ответ :) – Sagi1981

+0

Собственно, протокол SSDP, используемый для обнаружения в UPnP, такой же, как поддерживается PNRP, реализованным в пространстве имен System.Net.PeerToPeer , так что это должно работать очень хорошо, и включение исключения UPnP в брандмауэр также должно работать для него. – Lucero

+0

Если вы посмотрите на мой комментарий к другому ответу. Будет ли UPnP также требовать, чтобы PeerToPeer был включен, и существуют ли какие-либо риски безопасности? – Sagi1981

1

Вид равный-равному сетевые проблемы становятся просто точки тривиален, если назначить одну машину, как мастер-сервер. Он должен иметь известное имя, к которому могут подключаться все суб-серверы, чтобы они могли публиковать (и отзывать) их доступность. Затем клиент может отправить запрос запроса на тот же сервер и получить список известных серверов взамен.

Это также может решить проблему брандмауэра, мастер-сервер может быть прослушивает порт 80.

Посмотрите в пространство имен System.Net.PeerToPeer для p2p решения, поддерживаемого фреймворка.

+0

Проблема в том, что она должна работать во многих разных сетях, и мы не можем гарантировать, что они настроят главный сервер. Я знаю, что это усложняет ситуацию, но мне нужно работать без нее. Спасибо за быстрый ответ. – Sagi1981

+0

Я рассмотрю System.Net.PeerToPeer, чтобы узнать, может ли он мне помочь. Если я не уточнил это, у пользователей есть отдельное клиентское серверное приложение в своей сети, где теперь они могут вручную вводить IP/имя сервера, к которому они хотят подключиться. Приложение должно транслировать и идентифицировать машины, на которых работают серверы, и они должны передавать их адреса. Как их настроить netowrk - это то, что я не знаю, - и я не могу ожидать, чтобы один «статический» названный мастер-сервер позаботился об этом. Но, может быть, я полностью вас не понимаю, и если да, тогда я извиняюсь. – Sagi1981

+0

Вариант Peer to peer кажется, что он может решить проблему. Но мне нужно будет включить его в компонентах Windows -> сетевых сервисах. Я не могу гарантировать, что у пользователя будет включен этот параметр, и разве он не откроется для потенциальных нарушений безопасности? Или я ошибаюсь, полагая, что вам нужен этот компонент, чтобы он работал (я попытался с примером, который я нашел здесь: http://blogs.msdn.com/p2p/archive/2007/03/12/ я знаю, что я продолжаю сужать его, но это будет выполнено без использования рабочего стола peerToPeer? – Sagi1981