2017-02-09 140 views
0

在我的应用程序中,我有自己的API将内容保存在不同的存储库中。其中之一是Sensenet。Sensenet:使用Sensenet客户端API初始化客户端内容

我使用客户端API来存储Sensenet的内容,但我有一个问题,当我初始化客户端背景:

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

当我开始我的应用程序,在方法上初始化第一次调用好吧,但在第二个电话等等,它启动一个例外...

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

回答

1

客户端上下文的初始化方法应称为每个应用程序域只有一次。这就是为什么你在第二次电话会遇到异常。

就你的情况而言(当你从另一个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();