Создание бизнес-приложений с помощью Silverlight - Извещающие уведомления с помощью сервера сокета

ОГЛАВЛЕНИЕ

Извещающие уведомления с помощью сервера сокета

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

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

Одной из важных возможностей Silverlight является связь с сокетами TCP. По соображениям безопасности Silverlight позволяет подключение лишь к портам серверов в диапазоне 4502-4532. Это одна из многих политик безопасности, примененных в «песочнице». Другая важная политика «песочницы» состоит в том, что Silverlight не может быть слушателем и, в силу этого, не может принимать входящие подключения через сокеты. Поэтому я и создам сервер сокетов, слушающие на порте 4530 и поддерживающий пул подключений, где каждое подключение представляет активного представителя центра обработки звонков.

Среда выполнения сокетов Silverlight также обеспечивает выполнение междоменных политик явного соглашения на сервере для всех подключений через сокет. Когда код приложения Silverlight пытается открыть подключение к конечной точке IP или на допустимом номере порта, непрозрачном для кода пользователя, среда выполнения создаст подключение к конечной точке IР на этом же IP-адресе с номером порта 943. Этот номер порта жестко закодирован в реализацию Silverlight и не может быть настроен приложениями, либо изменен разработчиком.

Рис. 1 показывает место в архитектуре сервера политик. При вызове Socket.ConnectAsync последовательность потока сообщений подобна показанной на рис. 3. Сообщения 2, 3 и 4 разработаны так, чтобы быть полностью непрозрачными для пользовательского кода.

 

Рис. 3. Среда выполнения Silverlight автоматически запрашивает междоменную политику для подключений через сокет

Мне необходимо реализовать сервер политики на том же IP-адресе, что и сервер диспетчера звонков. Я могу реализовать оба сервера в одном процессе ОС; но для простоты реализую их в двух отдельных программах консоли. Эти программы консоли можно легко преобразовать в службы Windows и приспособить к работе с кластерами, для обеспечения автоматических переходов на другой ресурс при сбоях, чтобы предоставить надежность и доступность.