Sense/net 在 Web 应用程序中使用内容查询
Sense/net using content query in web application
我尝试在 Web 应用程序中使用内容查询,但它引发异常“Lucene.Net.Store.AlreadyClosedException:此 IndexReader 已关闭”。请帮我解决这个问题。
var startSettings = new RepositoryStartSettings
{
Console = Console.Out,
StartLuceneManager = true, // <-- this is necessary
IsWebContext = false,
PluginsPath = AppDomain.CurrentDomain.BaseDirectory,
};
using (Repository.Start(startSettings))
{
var resultQuery = ContentQuery.Query("+InTree:@0 + DisplayName:*@1*", null, folderPath, q);
}
从不同的应用程序(应用程序域)连接到 Sense/Net 的推荐方法是通过 REST API。它更容易维护并且涉及更少的配置(唯一的例外是您在 Sense/Net 应用程序本身内部工作,或者您只有一个应用程序并且您不想从任何地方访问 Sense/Net否则,您愿意处理 Sense/Net 的本地索引及其所需的所有配置值等)。
通过 REST 连接 API 并不意味着您必须手动发送 HTTP 请求(尽管这一点也不复杂):有一个 .Net 客户端库 为你做的。您可以通过客户端访问所有内容元数据或二进制文件,可以上传文件、查询内容、管理权限等
// loading a content
dynamic content = await Content.LoadAsync(id);
DateTime date = content.BirthDate;
// querying
var results = await Content.QueryAsync(queryText);
- 安装:https://www.nuget.org/packages/SenseNet.Client
- 来源和示例:https://github.com/SenseNet/sn-client-dotnet
要在 Web 应用程序中使用它,您必须执行以下操作:
- 在应用程序生命周期开始时(例如应用程序启动)初始化客户端上下文一次
- 如果您需要以当前登录用户的名义向 Sense/Net 发出请求(例如,因为您想要查询她可以访问的文档),那么您必须创建一个新的 ServerContext 为每个用户提供 username/password 对象,并将此对象提供给任何客户端调用(例如加载或保存内容方法)。
var sc = new ServerContext
{
Url = "http://example.com",
Username = "user1",
Password = "asdf"
};
var content = await Content.LoadAsync(id, sc);
我尝试在 Web 应用程序中使用内容查询,但它引发异常“Lucene.Net.Store.AlreadyClosedException:此 IndexReader 已关闭”。请帮我解决这个问题。
var startSettings = new RepositoryStartSettings
{
Console = Console.Out,
StartLuceneManager = true, // <-- this is necessary
IsWebContext = false,
PluginsPath = AppDomain.CurrentDomain.BaseDirectory,
};
using (Repository.Start(startSettings))
{
var resultQuery = ContentQuery.Query("+InTree:@0 + DisplayName:*@1*", null, folderPath, q);
}
从不同的应用程序(应用程序域)连接到 Sense/Net 的推荐方法是通过 REST API。它更容易维护并且涉及更少的配置(唯一的例外是您在 Sense/Net 应用程序本身内部工作,或者您只有一个应用程序并且您不想从任何地方访问 Sense/Net否则,您愿意处理 Sense/Net 的本地索引及其所需的所有配置值等)。
通过 REST 连接 API 并不意味着您必须手动发送 HTTP 请求(尽管这一点也不复杂):有一个 .Net 客户端库 为你做的。您可以通过客户端访问所有内容元数据或二进制文件,可以上传文件、查询内容、管理权限等
// loading a content
dynamic content = await Content.LoadAsync(id);
DateTime date = content.BirthDate;
// querying
var results = await Content.QueryAsync(queryText);
- 安装:https://www.nuget.org/packages/SenseNet.Client
- 来源和示例:https://github.com/SenseNet/sn-client-dotnet
要在 Web 应用程序中使用它,您必须执行以下操作:
- 在应用程序生命周期开始时(例如应用程序启动)初始化客户端上下文一次
- 如果您需要以当前登录用户的名义向 Sense/Net 发出请求(例如,因为您想要查询她可以访问的文档),那么您必须创建一个新的 ServerContext 为每个用户提供 username/password 对象,并将此对象提供给任何客户端调用(例如加载或保存内容方法)。
var sc = new ServerContext
{
Url = "http://example.com",
Username = "user1",
Password = "asdf"
};
var content = await Content.LoadAsync(id, sc);