【问题标题】:RavenDB Errors with NServiceBus 4.0NServiceBus 4.0 的 RavenDB 错误
【发布时间】:2013-09-18 20:07:53
【问题描述】:

我已经下载并安装了 NServiceBus 4.0,但是当总线启动时我遇到了一些困难......

2013-09-18 15:53:40,887 [1] 警告 NServiceBus.Persistence.Raven.RavenUserInstall er [(null)] - 无法将用户添加到 raven。处理将继续 System.MissingMethodException:找不到方法:'Raven.Abstractions.Data.PutRes ult Raven.Client.Connection.IDatabaseCommands.Put(System.String, System.Nullable `1,Raven.Json.Linq.RavenJObject,Raven.Json.Linq.RavenJObject)'。 在 NServiceBus.Persistence.Raven.RavenUserInstaller.AddUserToDatabase(字符串 身份,DocumentStore 文档存储) 在 NServiceBus.Persistence.Raven.RavenUserInstaller.Install(字符串标识) 在 c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Persistence\Raven\Ra venUserInstaller.cs:第 40 行

当我尝试将更改持久保存到文档存储时...

 public class RavenUnitOfWork: IManageUnitsOfWork
    {
        public IDocumentSession Session { get; set; }
        public void Begin()
        {

        }

        public void End(Exception ex = null)
        {
            if (ex == null && Session != null)
            {
                Console.WriteLine("Saving Changes to DB.");
                 Session.SaveChanges();
            }
        }
    }

produces


    2013-09-18 15:57:38,007 [13] INFO  NServiceBus.Unicast.Transport.TransportReceiv
    er [(null)] <(null)> - Failed to process message
    System.InvalidOperationException: Url: "/bulk_docs"

    System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xx
    xx-xxxx-xxxx-xxxxxxxxxxxx).
       at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failure
    MessageID, Object failureMessageFormatArgument, String failureArgumentName, Exce
    ption innerException)
       at System.Guid.TryParseGuidWithDashes(String guidString, GuidResult& result)
       at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result)
       at System.Guid..ctor(String g)
       at Raven.Database.Server.AbstractRequestResponder.GetRequestTransaction(IHttp
    Context context)
       at Raven.Database.Server.Responders.DocumentBatch.Respond(IHttpContext contex
    t)
       at Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx)
       at Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx)
     ---> System.Net.WebException: The remote server returned an error: (500) Intern
    al Server Error.
       at System.Net.HttpWebRequest.GetResponse()
       at Raven.Client.Connection.HttpJsonRequest.ReadJsonInternal(Func`1 getRespons
    e) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonReque
    st.cs:line 340
       --- End of inner exception stack trace ---
       at NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMe
    ssage message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unica
    st\Transport\TransportReceiver.cs:line 357
       at NServiceBus.Unicast.Transport.TransportReceiver.TryProcess(TransportMessag
    e message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unicast\T
    ransport\TransportReceiver.cs:line 235
       at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.ProcessMessage(TransportMe
    ssage message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Trans
    ports\Msmq\MsmqDequeueStrategy.cs:line 262
       at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action() in c:\BuildAgent\
    work\d4de8921a0aabf04\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueStrategy.c
    s:line 197
    2013-09-18 15:57:38,129 [29] INFO  NServiceBus.Unicast.Transport.TransportReceiv
    er [(null)] <(null)> - Failed to process message
    System.InvalidOperationException: Url: "/bulk_docs"

    System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xx
    xx-xxxx-xxxx-xxxxxxxxxxxx).
       at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failure
    MessageID, Object failureMessageFormatArgument, String failureArgumentName, Exce
    ption innerException)
       at System.Guid.TryParseGuidWithDashes(String guidString, GuidResult& result)
       at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result)
       at System.Guid..ctor(String g)
       at Raven.Database.Server.AbstractRequestResponder.GetRequestTransaction(IHttp
    Context context)
       at Raven.Database.Server.Responders.DocumentBatch.Respond(IHttpContext contex
    t)
       at Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx)
       at Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx)
     ---> System.Net.WebException: The remote server returned an error: (500) Intern
    al Server Error.
       at System.Net.HttpWebRequest.GetResponse()
       at Raven.Client.Connection.HttpJsonRequest.ReadJsonInternal(Func`1 getRespons
    e) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonReque
    st.cs:line 340
       --- End of inner exception stack trace ---
       at NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMe
    ssage message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unica
    st\Transport\TransportReceiver.cs:line 357
       at NServiceBus.Unicast.Transport.TransportReceiver.TryProcess(TransportMessag
    e message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unicast\T
    ransport\TransportReceiver.cs:line 235
       at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.ProcessMessage(TransportMe
    ssage message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Trans
    ports\Msmq\MsmqDequeueStrategy.cs:line 262
       at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action() in c:\BuildAgent\
    work\d4de8921a0aabf04\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueStrategy.c
    s:line 197
    2013-09-18 15:57:38,262 [30] INFO  NServiceBus.Unicast.Transport.TransportReceiv
    er [(null)] <(null)> - Failed to process message
    System.InvalidOperationException: Url: "/bulk_docs"

我对 Raven 的配置如下:

   Configure.Instance.Configurer.ConfigureComponent<IDocumentStore>(() =>
            {
                var store = new DocumentStore
                    {
                        Url = "" // <-- Points to my machine at port 8080
                    };
                store.Initialize();
                store.JsonRequestFactory.DisableRequestCompression = true;
                return store;
            }, DependencyLifecycle.SingleInstance);

        Configure.Instance.Configurer.ConfigureComponent<IDocumentSession>(() => { return Configure.Instance.Builder.Build<IDocumentStore>().OpenSession(); }, DependencyLifecycle.InstancePerUnitOfWork);
        Configure.Instance.Configurer.ConfigureComponent<RavenUnitOfWork>(DependencyLifecycle.InstancePerUnitOfWork);

我在这里错过了什么?

谢谢。

【问题讨论】:

  • 您使用的是什么版本的 Visual Studio?

标签: ravendb nservicebus


【解决方案1】:

这是一个已知问题。见#1518。它已在#1551 中修复,但尚未发布。要么尝试从源代码构建自己,要么等待它包含在版本中。

【讨论】:

  • @AlexeyZimarev - 请将问题报告给 NSB 团队进行验证。谢谢。
  • 我能够通过将 RavenDb.Client v2 添加到我的解决方案来解决此问题。我之前使用的是 2.5,因为我在项目中使用了 RavenDb。对我来说,这意味着在任何引用 NSB 的项目中,都不可能将最新的 RavenDb.Client 程序集用于您自己的目的。
  • 是的,不应该这样。
【解决方案2】:

请确保您运行的是 Raven v2。
Raven v2.5 尚未针对 NServiceBus v4 进行测试!

【讨论】:

    【解决方案3】:

    我通过添加程序集绑定重定向修复了使用 Raven Client 2.5 和 NServiceBus 4.4.2 时得到的 MissingMethodException

      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Raven.Client.Lightweight" publicKeyToken="37f41c7f99471593" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-2.5.0.0" newVersion="2.5.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多