Sensenet: инициализация ClientContent с использованием клиентского API Sensenet

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

Я использую клиентский API для хранения контента в Sensenet, но у меня возникает проблема при инициализации клиентского контекста:

ClientContext.Initialize(new[]
            {
                new ServerContext
                {
                    Url = siteUrl,
                    Username = userName,
                    Password = userPassword
                }
            });

Когда я запускаю приложение, первый вызов методов хорошо инициализируется, но при втором вызове и т. Д. Запускается исключение...

Я считаю, что решение может быть принято с помощью ClientContext.Current... Но я не знаю, как мне его реализовать...

1 ответ

Решение

Метод Initialize клиентского контекста должен вызываться только один раз для каждого домена приложения. Вот почему вы получаете исключение на второй звонок.

В вашем случае (как вы называете Sense/Net из другого веб-приложения) вы должны вызывать его только один раз где-нибудь в процессе запуска вашего приложения. Другой пример: из инструмента командной строки его следует вызывать где-то в методе Main.

Метод Initialize в настоящее время мало что делает, просто сохраняет предоставленную информацию о сервере. Это полезно, если вы хотите, например, вызвать Sense/Net с одним пользователем-администратором из инструмента импортера, чтобы вам не приходилось указывать учетные данные пользователя при каждом вызове.

Но если вы хотите вызывать методы с разными учетными данными пользователя (чтобы использовать систему разрешений Sense/Net), вы можете просто предоставлять информацию о сервере при каждом вызове. Например:

var server = new ServerContext
{
    Url = "http://example.com",
    Username = "johnsmith",
    Password = "password"
};

// see the server parameter here!
var content = await Content.LoadAsync(1234, server);
content["MyField"] = "value";

// no server parameter, we already know it
await content.SaveAsync();
Другие вопросы по тегам