Sensenet:使用 Sensenet 客户端初始化 ClientContent API
Sensenet: Initialize ClientContent using Sensenet Client API
在我的应用程序中,我有自己的 API 将内容保存在不同的存储库中。其中之一就是 Sensenet。
我使用客户端 API 将内容存储在 Sensenet 上,但在初始化客户端上下文时遇到问题:
ClientContext.Initialize(new[]
{
new ServerContext
{
Url = siteUrl,
Username = userName,
Password = userPassword
}
});
当我启动我的应用程序时,对方法的第一次调用初始化良好,但在第二次调用等时它启动异常...
我相信解决方案可以通过使用ClientContext.Current...但是我不知道我应该如何实现它...
客户端上下文的 Initialize 方法应该每个应用程序域只调用一次。这就是您在第二次调用时出现异常的原因。
在您的情况下(当您从另一个 Web 应用程序调用 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();
在我的应用程序中,我有自己的 API 将内容保存在不同的存储库中。其中之一就是 Sensenet。
我使用客户端 API 将内容存储在 Sensenet 上,但在初始化客户端上下文时遇到问题:
ClientContext.Initialize(new[]
{
new ServerContext
{
Url = siteUrl,
Username = userName,
Password = userPassword
}
});
当我启动我的应用程序时,对方法的第一次调用初始化良好,但在第二次调用等时它启动异常...
我相信解决方案可以通过使用ClientContext.Current...但是我不知道我应该如何实现它...
客户端上下文的 Initialize 方法应该每个应用程序域只调用一次。这就是您在第二次调用时出现异常的原因。
在您的情况下(当您从另一个 Web 应用程序调用 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();