Создание сервера регистрации для настольного приложения WPF - PullRequest
0 голосов
/ 13 октября 2011

Я запускаю проект для домашних животных, чтобы посмотреть, смогу ли я создать список друзей (например, AIM / MSN / Skype / Steam) и сосредоточился только на том, чтобы заставить работать онлайн / офлайн уведомления.Мой опыт работы с C #, .NET и создание Webforms и Winforms, так что я также использую это как возможность изучить WPF, который, как я знаю, является сложной задачей, но из того, что я прочитал в конце, WPF облегчит этот вид проекта.

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

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

Затем сервер входа в систему сохраняет имя пользователя в хеш-таблице (будет ли это масштабироваться?) И запрашивает базу данных списка друзей.для всех, кто дружит с вами, затем проверяет ту же самую хеш-таблицу для любого из тех друзей, которые находятся в сети.Когда у сервера входа есть хэш-таблица, он отправляет вашу информацию (имя, Ip, порт) клиенту вашего друга (снова WCF?), А затем клиент вашего друга отправляет вашему клиенту информацию о том, что клиент друга находится в сети (снова WCF?)

Это, вероятно, довольно упрощенно, но сработает ли это?

Заранее спасибо.

1 Ответ

0 голосов
/ 14 октября 2011

Я делал это с .Net Remoting ранее.

  • Клиент и сервер имеют общий интерфейс DLL.
  • Клиент создает на сервере объект сервера (singleton) иполучает интерфейс IServer.
  • Клиент передает объект IClient IServer.
  • Сервер содержит текущий список подключенных IClient (рекомендуется периодическая проверка связи).
  • Серверможет манипулировать любым IClient, который ему нужен (например, push-уведомления)
  • Сервер может действовать как оператор коммутатора и передавать интерфейсы IClient друг другу (например, для сеанса чата)

Я сделалэто с двунаправленным каналом (GenuineChannels) для производительности (двоичная сериализация), push-уведомлений и для прохождения через брандмауэры (если клиент находится за брандмауэром, сервер не может перезвонить им после разрыва соединения).


======== Параметры ========== *

.Net Remoting - действительно не удалосьт изменилось с тех пор - так что этовсе еще выполнимо.

обратные вызовы WCF - не работали через брандмауэры, когда я их пробовал, потому что они ждали, когда сервер откроет соединение, и использовали два отдельных соединения.http://msdn.microsoft.com/en-us/magazine/cc163537.aspx

Сервисная шина Azure - Решение, которое, я думаю, Microsoft хочет, чтобы вы рассмотрели в эти дни http://www.microsoft.com/windowsazure/features/servicebus/

...