Приложение, которое использует Cервер Xafari, должно удовлетворять следующим требованиям.

ObjectSpaceProvider

В качестве провайдера Object Space приложение должно использовать SecuredObjectSpaceProvider (см. https://documentation.devexpress.com/#eXpressAppFramework/CustomDocument113437). С этой целью в классе приложения (класс-наследник XafApplication) необходимо переопределить метод XafApplication.CreateDefaultObjectSpaceProvider:

 

using DevExpress.ExpressApp.Security;

using DevExpress.ExpressApp.Security.ClientServer;

// ... 

protected override void CreateDefaultObjectSpaceProvider(

 CreateCustomObjectSpaceProviderEventArgs args) 

{

  args.ObjectSpaceProvider = new SecuredObjectSpaceProvider(

 (SecurityStrategyComplex)Security, 

args.ConnectionString, 

args.Connection);

}

 

Или написать и подключить обработчик события XafApplication.CreateCustomObjectSpaceProvider в AppModule приложения (предпочтительный подход):

 

    …

    Application.CreateCustomObjectSpaceProvider +=

        Application_CreateCustomObjectSpaceProvider;

    …

 

    private void Application_CreateCustomObjectSpaceProvider(

        object sender, CreateCustomObjectSpaceProviderEventArgs e)

    {

        if (e.ObjectSpaceProvider == null)

        {

            var app = (XafApplication) sender;

            var security = (SecurityStrategy) app.Security;

            e.ObjectSpaceProvider = new SecuredObjectSpaceProvider(

                security, e.ConnectionString, e.Connection);

        }

    }

Security strategy

Использование SecuredObjectSpaceProvider в приложении, в свою очередь, требует в подсистеме безопасности использовать  класс DevExpress.ExpressApp.Security.SecurityStrategyComplex (см. https://documentation.devexpress.com/#eXpressAppFramework/clsDevExpressExpressAppSecuritySecurityStrategyComplextopic).

Value manager

При работе Сервера Xafari в режиме выделенного сервера, серверная часть приложения в качестве ValueManager должна использовать Xafari.XafariMultiThreadValueManager<T>. Для этого следует установить значение статического свойства ValueManager.ValueManagerType:

 

ValueManager.ValueManagerType = typeof(XafariMultiThreadValueManager<>).GetGenericTypeDefinition();

 

Это необходимо сделать раньше любого обращения к ValueManager. Например, в конструкторе класса приложения.

Если для запуска сервера используется команда StartXafariServer  консольной утилиты RunCmd.exe, то тип используемого ValueManager необходимо указать в секции appSettins конфигурационного файла приложения:

 

<add key="ValueManagerType" value="Xafari.XafariMultiThreadValueManager`1" />

 

Утилита RunCmd.exe считывает значение этого ключа и устанавливает значение статического свойства ValueManager.ValueManagerType.

Во время работы клиентской части приложения допустимо использовать любой ValueManager, необходимый разработчику приложения.