帮帮我理解 我读过这个
"终结者的执行时间和顺序无法预测或预先确定"
正确?
但是看看RavenDB源代码TransactionStorage.cs,我看到了这一点
~TransactionalStorage()
{
try
{
Trace.WriteLine(
"Disposing esent resources from finalizer! You should call TransactionalStorage.Dispose() instead!");
Api.JetTerm2(instance, TermGrbit.Abrupt);
}
catch (Exception exception)
{
try
{
Trace.WriteLine("Failed to dispose esent instance from finalizer because: " + exception);
}
catch
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
API类(属于Managed Esent)可能会使用SafeHandle对本机资源进行处理?
因此,如果我理解正确,可以在TransactionStorage之前完成本机句柄SafeHandle,这可能会产生不良影响,也许为什么Ayende在此处添加了catch all子句?
实际上潜入Esent代码,它不使用SafeHandles.
根据CLR通过C#这是危险的吗?
internal static class SomeType {
[DllImport("Kernel32", CharSet=CharSet.Unicode, EntryPoint="CreateEvent")]
// This prototype is not robust
private static extern IntPtr CreateEventBad(
IntPtr pSecurityAttributes, Boolean manualReset, Boolean initialState, String name);
// …Run Code Online (Sandbox Code Playgroud) 试图将JOliver的EventStore与RavenDB连接起来并遇到麻烦.我在Raven中创建了一个名为RavenEventStore的新数据库.
以下是我的连线;
return Wireup.Init()
.UsingRavenPersistence("RavenEventStore")
.UsingAsynchronousDispatchScheduler()
.DispatchTo(new DelegateMessageDispatcher(DispatchCommit))
.Build();
Run Code Online (Sandbox Code Playgroud)
当调用Wireup.Init()时,RavenDb端会发生此异常;
Url:"/ indexes/RavenCommitByDate"Newtonsoft.Json.JsonReaderException:解析值时遇到意外的字符:.第1行,位于1.:Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs中的Newtonsoft.Json.JsonTextReader.ParseValue(Char currentChar):位于Newtonsoft.Json.JsonTextReader.ReadInternal的第699行()位于d:\ Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:第4行,位于d:\中的Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader,Type t,JsonConverter propertyConverter)开发\发布\ Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:第10行,位于d:\ Development\Releases\Json中的Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Type objectType)\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:位于c:\ Builds\raven\Raven.Database\Extensions\HttpExtensions.cs中Raven.Database.Extensions.HttpExtensions.ReadJsonObject [T](IHttpContext context)的第118行:第57行在Raven.Database.Server.Responders.Index.Put(IHttpContext conte xt,String index)在c:\ Builds\raven\Raven.Database\Server\Responders\Index.cs:第64行,位于c:\ Builds\raven中的Raven.Database.Server.Responders.Index.Respond(IHttpContext context)\Raven.Database\Server\Responders\Index.cs:位于c:\ Builds\raven\Raven.Database\Server\HttpServer.cs:第477行的Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx)第49行c:\ Builds\raven\Raven.Database\Server\HttpServer.cs中的Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx):第259行
我也可以在RavenDB日志中看到异常;
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: . Line 1, position 1. at Newtonsoft.Json.JsonTextReader.ParseValue(Char currentChar) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:line 699 at Newtonsoft.Json.JsonTextReader.ReadInternal() in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:line 499 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, Type t, JsonConverter propertyConverter) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 1072 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType) in …Run Code Online (Sandbox Code Playgroud) 如何配置能够发送过多请求或接收过大响应的RavenDB数据库?
默认情况下,RavenDB不允许可能危及服务器或客户端稳定性的操作,并且RavenDB会话会自动强制执行以下限制:
如果未指定页面大小值,则结果的长度将限制为128个结果.在服务器端,页面大小有1,024个结果的硬限制.
每个会话对服务器的远程调用次数限制为30次.
我想在客户端配置DocumentStore/DocumentSession,它会增加页面大小值的限制和每个会话服务器的远程调用次数.
我一直在努力解决这个问题.
我有一个客户端对象(clients/513),如下所示:
{
"Risks": [
{
"Id": "421eacf0-14e9-4004-ab0b-95d20e976aac",
"RiskFactor": "ElectricalEquipment",
"Description": "Should be allowed to play with electronics."
},
{
"Id": "4bbecbe2-acfc-45c3-b87a-3321e1eca95a",
"RiskFactor": "ViolenceToStaffVerbal",
"Description": "Tourettes"
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个包含以下代码的索引:
地图
from c in docs.Clients
from r in c.Risks
select new { ClientId = c.Id, RiskId = r.Id }
Run Code Online (Sandbox Code Playgroud)
转变
from c in results
from r in c.Risks
select new { ClientId = c.Id, RiskId = r.Id }
Run Code Online (Sandbox Code Playgroud)
我认为我理解MAP只是定义了您希望能够搜索的属性.并且TRANSFORM以特定形状返回实际数据.
我想要返回ClientId,RiskId以及其他一些与风险相关的属性,这样我才能做到.As<ViewModel>(),但是当我执行查询时,我似乎得到了一些不一致的结果.(它喜欢改变它返回的结果数量,具体取决于我执行查询的次数,有时是4次,有时是5次).
另外:RiskId过滤似乎返回一个,有时返回多个Risk,id不是指定的Id.
任何帮助将非常感激.
我想检测集合或索引的最后修改或写入时间。
注意:这在文档级别有效,但是我需要在集合/索引级别。如何通过C#获取RavenDB文档的最后写入日期
我们尝试通过以下命令安装NServiceBus 4.2.0.0和RavenDB: -
nserviceBus.host.exe -install serviceName="xxxx.Server" -displayname="xxxx.Server" -username="domainName\serviceAccountName" -password="serviceAccountPassword"
Run Code Online (Sandbox Code Playgroud)
NServiceBus似乎安装但RavenDB安装失败 - 注意我们正在尝试在8080以外的端口下安装 - 因此我们放置了这条线: -
<add name="NServiceBus/Persistence" connectionString="Url = http://localhost:9090" />
Run Code Online (Sandbox Code Playgroud)
...在我们的配置中
我们收到的错误信息是: -
[1] WARN NServiceBus.ConfigureRavenPersistence [(null)] <(null)> - Raven could not be contacted. We tried to access Raven using the following url: http://localhost:9090.
Run Code Online (Sandbox Code Playgroud)
如果我离开默认端口(8080),一切都安装正确,但我需要更改端口,因为8080已经在使用
有没有人有任何想法?
我有一个使用索引的RavenDB查询,我需要添加条件检查嵌套对象的类型(这些对象不是单独的文档)
entries = session.Query<result, index>()
/* some conditions here */
.Where(x => x.Messages.Any(m => m.GetType() == typeof(MyMessage)))
.ToList();
Run Code Online (Sandbox Code Playgroud)
Raven告诉我,他不知道如何翻译GetType。那么我该如何实现呢?
我们正在RavenDB项目中使用,我们有一个搜索面板,允许用户使用不同的标准搜索文档.以建筑时代为例.这些输入数据是从查询字符串中的Web客户端发送的,我必须将它们翻译成Lucene语法才能得到结果,RavenDB但我认为依赖Raven会更容易Linq提供商为我做这项工作,而不是:
Age_Range : [Ix5 TO NULL]
Run Code Online (Sandbox Code Playgroud)
我可以有 :
b=>b.Age>=5
Run Code Online (Sandbox Code Playgroud)
然后,我所要做的就是将此字符串转换为lambda表达式.
我现在正在做的是编译这样的代码:
public class BuildingQueryBuilderXYZ:IQueryBuilder<Building>
{
public IRavenQueryable<Building> BuildQuery(IDocumentSession session)
{
return session.Query<Building>().Where(b=>b.Age>=5);
}
}
Run Code Online (Sandbox Code Playgroud)
它正在工作,但我必须为每个请求编译一个程序集,这不是搜索数据库的有效方法.
如果我能找到将此字符串b=>b.Age>=5转换为lambda表达式的方法,我认为我的问题将得到解决:)
我在Pluralsight上观看了NServiceBus简介,演示者使用MSMQ和RavenDB来存储消息.为什么是这样?将消息存储在数据库中有什么好处,而不仅仅是MSMQ?搜索我发现了很多关于如何将RavenDB与NServiceBus一起使用的结果,但不是为什么你应该这样做.
保存新的F#记录时,我Id@在RavenDb文档中获得了一个额外的列,当我在代码中加载或查看该对象时会显示该列;它甚至可以通过我的F#API转换为JSON。
这是我的F#记录类型:
type Campaign = { mutable Id : string; name : string; description : string }
Run Code Online (Sandbox Code Playgroud)
我没有做任何令人兴奋的事情来保存它:
let save c : Campaign =
use session = store.OpenSession()
session.Store(c)
session.SaveChanges()
c
Run Code Online (Sandbox Code Playgroud)
保存记录的新实例将创建ID为的文档campaigns/289。这是RavenDb中文档的全部价值:
{
"Id@": "campaigns/289",
"name": "Recreating Id bug",
"description": "Hello StackOverflow!"
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在C#中使用相同的数据库(和文档)时,我没有获得额外的Id@价值。这是我在C#中保存记录时的样子:
{
"Description": "Hello StackOverflow!",
"Name": "Look this worked fine",
}
Run Code Online (Sandbox Code Playgroud)
(此外-“名称”与“名称”表示我的文档中有2个名称列。至少我理解该问题)。
所以我的问题是:在RavenDb中保存F#记录时,如何摆脱Id@正在创建的额外属性?
ravendb ×10
c# ×4
nservicebus ×2
clr ×1
cqrs ×1
database ×1
esent ×1
event-store ×1
f# ×1
lambda ×1
linq ×1
lucene ×1
nosql ×1
ravendb-http ×1