Я строю иногда подключенную систему, используя 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 это необходимо, но я не видел, чтобы это обсуждалось ни в каких блогах / статьях. Я что-то упустил в процессе развертывания? Есть ли другие решения этой проблемы, которые я должен рассмотреть?