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();