2015-06-22 1 views
0

мы хотим создать приложение (C#/Net.) Для следующего сценария:окно рабочего стола уведомление

  • внутренних "предупреждение системы". Пользователи должны быть проинформированы об этом сбое системы, планировании простоев для Сервисов и т. Д.
  • только в одну стороны: центральная служба будет подталкивать сообщения пользователя
  • мы также должны возможность включить/отключить сообщение, например: сообщения «есть проблемы с почтовой системой» должны быть удалены из любого компьютера после того, как проблема решена
  • мы хотим ГРАФИК сообщения для планового Maintanance
  • около 1000 окон клиентов, мы также хотим «группа» это клиенты, поэтому мы можем контролировать, который клиент получит сообщение

Первая мысль заключалась в написании небольшого приложения whi ch будет запрашивать каждые X секунд центральную базу данных для новых и существующих сообщений.

Возможно, кто-то уже работал над аналогичным проектом? Является ли клиент с запросом базы данных способом? Лучше использовать другую технологию, например, службу WCF?

Спасибо за вашу помощь

Марк

ответ

1

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

Чтобы группировать и управлять клиентами, вы можете использовать базу данных, это, вероятно, лучший способ, но сервер должен обрабатывать все открытые соединения, а базы данных могут хранить только DATA, а не виртуальные объекты, представляющие соединение, поэтому серверное программное обеспечение должно управлять ими по-другому.

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

Затем он создаст словарь, используя этот идентификатор в качестве ключа, и соединение в качестве значения. Этот способ во время отправки сообщения определенной группе можно сделать двумя способами:

1) Вы можете загрузить из базы данных идентификаторы, принадлежащие этой группе, а затем отправить им сообщения. Вам нужно будет проверить, существует ли этот идентификатор в массиве KEYS словаря, потому что возможно, что определенный клиент еще не подключен.

2) Вы можете выполнять итерацию массива KEYS словаря, проверить, к какой группе относится этот идентификатор, и если это группа желаний, отправьте ее.

Если вы имеете дело с большим количеством клиентов, я предлагаю вам использовать метод 1.

Чтобы отключить/удалить сообщение с компьютера клиента, просто есть сервер отправить специальное командное сообщение, что клиент программное обеспечение интерпретирует как «удалить это сообщение».Чтобы сделать это возможным, каждое сообщение без команды должно иметь уникальные идентификаторы, так что командные сообщения могут сообщать клиентскому программному обеспечению, к какому сообщению относится эта команда.

Ваш проект звучит очень интересно. Я был бы рад помочь вам, написав библиотеку, которую вы могли бы использовать, или просто помочь вам разобраться в этом, если хотите. (Бесплатно, только для опыта).

+0

Здравствуйте, спасибо за ваш ответ. Может быть, есть способ пойти с SignalR. http://www.asp.net/signalr/overview/getting-started/introduction-to-signalr –

+0

SignalR выполняет эту работу, но не в случае необходимости в настольном приложении. SignalR - это способ иметь эту функциональность между загруженной страницей на компьютере клиента и сервером. Одним из примеров является то, что когда вы открываете Facebook, он создает звук, когда вы получаете сообщение чата. Он будет работать, только если клиент откроет эту страницу. –

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

  • Нет связанных вопросов^_^