Сохранение ServerSyncProvider на сервере в реализации службы WCF - PullRequest
1 голос
/ 06 декабря 2011

Я строю иногда подключенную систему, используя Microsoft Synchronization Framework с WCF в качестве транспортного средства. Клиентское приложение создает SyncAgent с поставщиком синхронизации SqlCe в качестве локального поставщика и ServerSyncProviderProxy в качестве удаленного поставщика.

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

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MMFSyncService : IMMFSyncService
{
    private const string cstrDatabaseProvider = "DatabaseProvider";
    private const string cstrFileProvider = "FileProvider";

    private MobileApplications _application;
    private MMFDatabaseSynchronizationScopes _scope;

    private Dictionary<string, IMMFServerSyncProvider> _syncProviders;

    ...
}

Коллекция _syncProviders должна быть в состоянии сохраняться от вызова к вызову, так что возможна многократная синхронизация, и ее не нужно повторно инициализировать каждый раз. Когда я собирал приложение и запускал его через встроенный «веб-сервер» Visual Studio, этот код работал отлично, однако, после развертывания на удаленном сервере IIS, объект _syncProviders равен нулю при последующих вызовах службы.

Из того, что я прочитал, это ожидаемое поведение с WCF, и это была лишь странность запуска его в общей памяти в Visual Studio, которая когда-либо позволяла этому работать. По-видимому, существует два подхода к решению этой проблемы: либо использование DurableService для сохранения данных в базе данных между вызовами, либо установка ServiceBehavior в контекстный режим Single и для приложений с высокой производительностью решение DurableService - единственный подход .

Кажется, что для WCF-реализаций Synchronization Framework это необходимо, но я не видел, чтобы это обсуждалось ни в каких блогах / статьях. Я что-то упустил в процессе развертывания? Есть ли другие решения этой проблемы, которые я должен рассмотреть?

...