0

在我的应用程序中,我有自己的 API,可以将内容保存在不同的存储库中。其中之一是 Sensenet。

我使用客户端 API 将内容存储在 Sensenet 上,但在初始化客户端上下文时遇到问题:

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

当我启动我的应用程序时,对方法的第一次调用初始化良好,但在第二次调用时,它会启动一个异常......

我相信该解决方案可以通过使用 ClientContext.Current... 但我不知道我应该如何实现它...

4

1 回答 1

1

每个应用程序域只能调用一次客户端上下文的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();
于 2017-02-11T14:38:19.020 回答