【发布时间】:2016-09-01 00:58:28
【问题描述】:
有时在 Neo4jClient 中我收到此错误。我试图调查什么问题,但我没有找到任何原因。有没有人有同样的问题或者可以帮助我?
谢谢
{"Message":"发生错误。","ExceptionMessage":"对象引用未设置为对象的实例。","ExceptionType":"System.NullReferenceException","StackTrace":" at
Neo4jClient.GraphClient.Neo4jClient.IRawGraphClient.ExecuteGetCypherResults[TResult](CypherQuery 查询)在 D:\temp\9517fa3\Neo4jClient.Shared\GraphClient.cs:line 919\r\n at
Mandarim.Storage.Neo4j.Manager.ManagerBase1.GetNodesRelatedOrderBy(String match, String id, String relationNodeType, String propertyOrderBy, Int32 skip, Int32 take, Direction direction,
Boolean distinct, Expression1 其中)在 P:\Desenvolvimento\branchs\builder-3.0\Mandarim.Storage.Neo4j\Manager\ManagerBase.cs:line 2105\r\n at
Mandarim.Storage.Neo4j.Manager.ManagerBase1.GetNodesRelatedOrderBy(String id, Labels labelin, Labels labelout, String relationTypes, String propertyOrderBy, Int32 skip, Int32 take, Boolean
distinct, Expression1 其中,方向方向)在 P:\Desenvolvimento\branchs\builder-3.0\Mandarim.Storage.Neo4j\Manager\ManagerBase.cs:line 900\r\n at
Mandarim.Factory.Base.FactoryBase1.GetNodesRelatedOrderBy(String id, Labels labelin, Labels labelout, String relationTypes, String propertyOrderBy, Int32 skip, Int32 take, Boolean distinct,
Expression1 其中,方向方向)在 P:\Desenvolvimento\branchs\builder-3.0\Mandarim.Factory\Base\FactoryBase.cs:line 177\r\n at
PackDocs.Services.Storage.MandarimStorageServices1.GetNodesRelatedOrderBy(String id, Labels labelin, Labels labelout, String propertyOrderBy, Int32 skip, Int32 take, Boolean distinct,
Expression1 where, Direction direction, RelationTypes[] relationNodeType) in P:\Desenvolvimento\branchs\builder-3.0\Packdocs.Services.Storage\MandarimStorageServices.cs:line 292\r\n
在 Mandarim.PackDocs.Services.ManagerObjects.ManagerProject.GetProjects(Int32 skip, Int32 take, String orderby, CreatedState state) 中
P:\Desenvolvimento\branchs\builder-3.0\PackDocs.Services\ManagerObjects\ManagerProject.cs:line 116\r\n 在 PackDocs.OWIN.Services.Host.Controllers.ProjectsController.GetProjects(Int32
在 P:\Desenvolvimento\branchs\builder-3.0\Packdocs.OWIN.Services.Host\Controllers\v2\ProjectsController.cs:line 103\r\n 中跳过、Int32 取、String orderby、CreatedState 状态
lambda_method(Closure , Object , Object[] )\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass10.b__9(Object instance, Object[]
methodParameters)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken
cancelToken)\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n at
System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 堆栈跟踪从上一个引发异常的位置结束---\r\n at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在
System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在
System.Web.Http.Filters.AuthorizationFilterAttribute.d__2.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪
---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}
更新
ContainerBuilder _builder = new ContainerBuilder();
_builder
.Register<ITransactionalGraphClient>(context =>
{
try
{
var neo4jUri = GetNeo4jSettingValue("neo4jUri");
var user = GetNeo4jSettingValue("neo4jUser");
var pwd = GetNeo4jSettingValue("neo4jPassword");
ITransactionalGraphClient graphClient = new GraphClient(new Uri(neo4jUri), user, pwd);
graphClient.Connect();
graphClient.JsonConverters.Add(new DictionaryConverter());
graphClient.JsonConverters.Add(new DateTimeConverter());
graphClient.JsonConverters.Add(new CommonDeserializerMethods());
return graphClient;
}
catch (Exception e)
{
Trace.TraceError(e.ToString());
throw e;
}
}).SingleInstance();
_container = _builder.Build();
获取实例
try
{
_myGraphClient = _myGraphClient ?? AutofacNeo4j.Container.Resolve<ITransactionalGraphClient>();
if (_myGraphClient != null && !_myGraphClient.IsConnected)
_myGraphClient.Connect();
return _myGraphClient;
}
catch (Exception e)
{
Trace.TraceError(e.ToString());
_myGraphClient = _myGraphClient ?? AutofacNeo4j.Container.Resolve<ITransactionalGraphClient>();
_myGraphClient.Connect();
return _myGraphClient;
}
我的查询:
MyGraphClient.Cypher
.Match(match).Where((T a) => a.UUID == id)
.With("b")
.CurrentUser(CurrentUsername)
.WhereReadClause("b", GetDomainsClause("b"), CurrentUsername, CurrentRole, direction)
.Return(b => b.As<T>()).Results;
第二个例外:
D:\temp\9517fa3\Neo4jClient.Full\Transactions\TransactionManager.cs:line 229 中的 Neo4jClient.Transactions.TransactionManager.EnqueueCypherRequest(字符串 commandDescription,IGraphClient graphClient,CypherQuery 查询)
在 D:\temp\9517fa3\Neo4jClient.Shared\GraphClient.cs:line 871 中的 Neo4jClient.GraphClient.PrepareCypherRequest[TResult](CypherQuery 查询,IExecutionPolicy 策略)
在 Neo4jClient.GraphClient.d__881.MoveNext() in D:\temp\9517fa3\Neo4jClient.Shared\GraphClient.cs:line 967
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()
在 Mandarim.Storage.Neo4j.Manager.ManagerBase`1.d__113.MoveNext() 在 P:\Desenvolvimento\branchs\builder-3.0\Mandarim.Storage.Neo4j\Manager\ManagerBase.cs:line 2067
【问题讨论】:
-
您好,您能提供您用来调用
Neo4jClient的代码以及您正在序列化的任何数据对象吗?没有这些东西很难调试(不可能)! -
@ChrisSkardon 我用我的部分代码更新了我的问题。很奇怪,因为错误是随机发生的。但我大部分时间,是发生在第二次请求中。谢谢
-
@ChrisSkardon 我在同一案例中遇到的另一个例外。
-
@ChrisSkardon我发现了问题。我不知道为什么,但 TransactionContext 有时为空。在类 TransactionManager 方法 GetContext 中返回 nonDtcTransaction.TransactionContext;一片空白。你知道为什么这变成空了吗?
标签: neo4j neo4jclient