Наша компания сдает в аренду музыкальный сервис своим клиентам. Продукт состоит из автоматического mp3-плеера и ежедневных обновлений / обновлений музыкальной библиотеки клиентов (mp3-песен), загруженной на их машины. До сих пор мы использовали некрасивое решение для обновлений mp3, синхронизируя папки сервера и клиента с помощью GBridge. Это, очевидно, является недостатком, поскольку мы заставляем наших клиентов загружать всю нашу музыкальную библиотеку (в настоящее время 25 000 песен), в то время как большинство из них никогда не будут воспроизводить песни из всех наших музыкальных категорий (поп, рок и т. Д.). Самое главное, мы можем предложить только один пакет подписки (всю нашу музыкальную библиотеку), в то время как наши конкуренты предлагают пакеты по категориям с более низкими ценами. По этим причинам мы решили обратиться к WCF.
Служба использует режим создания экземпляров PerCall и реализует две операции, вызываемые из клиентского приложения winform с классическим шаблоном запрос-ответ.
Первая операция извлекает из базы данных категории, из которых клиенту разрешено загружать (запрос), и отправляет обратно клиенту список этих категорий (ответ).
Вторая операция используется для загрузки. Сначала клиент загружает версию базы данных сервера в формате xml. Аналогичный xml лежит на стороне клиента. Клиентское приложение проверяет, какие песни в каждой из категорий, возвращаемых после первой операции, отсутствуют в своем собственном XML-файле по сравнению с XML-файлом сервера. Если отсутствуют какие-либо файлы (элементы в xml), он загружает их по одному файлу за раз. После каждой загрузки клиент обновляет свой xml и снова делает то же самое сравнение, пока все файлы (элементы) не совпадут в 2 xml.
Короче говоря, учитывая, что режимом экземпляра в службе является PerCall по соображениям пропускной способности и сохранения низкого потребления памяти, и что обе мои операции используют шаблон запрос-ответ, что означает, что сообщения подтверждения будут отправляться обратно клиенту с каждый ответ от службы, поэтому, если что-то идет не так в соединении или если клиент не может связаться со службой, я могу перехватить CommunicationObjectFaptedException на клиенте, восстановить прокси-сервер и повторить попытку, как вы считаете, нужна надежная сессия в моей службе реализация? Какие проблемы могут возникнуть, если у меня нет надежных сеансов в только что описанных операциях?