Ravendb 瑞文回归400“;“请求太长”;NServiceBus尝试计划超时时出错

Ravendb 瑞文回归400“;“请求太长”;NServiceBus尝试计划超时时出错,ravendb,nservicebus,http-status-code-400,Ravendb,Nservicebus,Http Status Code 400,我有一个NServiceBus传奇,它试图使用Raven timeout persister安排超时,但当它尝试时,会出现以下错误: NServiceBus.Unicast.Transport.Transactional.TransactionalTransport [(null)] <(null)> - Failed raising 'transport message received' event for message with ID=90dadfbd-9eb6-4558-9

我有一个NServiceBus传奇,它试图使用Raven timeout persister安排超时,但当它尝试时,会出现以下错误:

NServiceBus.Unicast.Transport.Transactional.TransactionalTransport [(null)] <(null)> - Failed raising 'transport message received' event for message with ID=90dadfbd-9eb6-4558-96ec-37edb642330a\17275422
    System.InvalidOperationException: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
    <HTML><HEAD><TITLE>Bad Request</TITLE>
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
    <BODY><h2>Bad Request - Request Too Long</h2>
    <hr><p>HTTP Error 400. The size of the request headers is too long.</p>
    </BODY></HTML>
     ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
       at System.Net.HttpWebRequest.GetResponse()
       at Raven.Client.Connection.HttpJsonRequest.ReadStringInternal(Func`1 getResponse)
       --- End of inner exception stack trace ---
       at Raven.Client.Connection.HttpJsonRequest.ReadStringInternal(Func`1 getResponse)
       at Raven.Client.Connection.HttpJsonRequest.ReadResponseString()
       at Raven.Client.Connection.HttpJsonRequest.ReadResponseJson()
       at Raven.Client.Connection.ServerClient.DirectPut(RavenJObject metadata, String key, Nullable`1 etag, RavenJObject document, String operationUrl)
       at Raven.Client.Connection.ServerClient.<>c__DisplayClass10.<Put>b__f(String u)
       at Raven.Client.Connection.ServerClient.TryOperation[T](Func`2 operation, String operationUrl, Boolean avoidThrowing, T& result)
       at Raven.Client.Connection.ServerClient.ExecuteWithReplication[T](String method, Func`2 operation)
       at Raven.Client.Connection.ServerClient.Put(String key, Nullable`1 etag, RavenJObject document, RavenJObject metadata)
       at Raven.Client.Document.HiLoKeyGenerator.PutDocument(JsonDocument document)
       at Raven.Client.Document.HiLoKeyGenerator.GetNextMax()
       at Raven.Client.Document.HiLoKeyGenerator.NextId()
       at Raven.Client.Document.HiLoKeyGenerator.GenerateDocumentKey(DocumentConvention convention, Object entity)
       at Raven.Client.Document.MultiTypeHiLoKeyGenerator.GenerateDocumentKey(DocumentConvention conventions, Object entity)
       at Raven.Client.Document.DocumentStore.<>c__DisplayClass1.<Initialize>b__0(Object entity)
       at Raven.Client.Document.InMemoryDocumentSessionOperations.GetOrGenerateDocumentKey(Object entity)
       at Raven.Client.Document.InMemoryDocumentSessionOperations.StoreInternal(Object entity, Nullable`1 etag, String id)
       at Raven.Client.Document.InMemoryDocumentSessionOperations.Store(Object entity)
       at NServiceBus.Timeout.Hosting.Windows.Persistence.RavenTimeoutPersistence.Add(TimeoutData timeout)
       at NServiceBus.Timeout.Core.TimeoutTransportMessageHandler.Handle(TransportMessage message)
       at NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived(TransportMessage msg)
NServiceBus.Unicast.Transport.Transactional.Transactional Transport[(null)]-无法为ID=90DADBD-9eb6-4558-96ec-37edb642330a\17275422的消息引发“已接收传输消息”事件
System.InvalidOperationException:
错误的请求
请求错误-请求太长
HTTP错误400。请求标头的大小太长

--->System.Net.WebException:远程服务器返回错误:(400)请求错误。 在System.Net.HttpWebRequest.GetResponse()中 位于Raven.Client.Connection.HttpJsonRequest.ReadStringInternal(Func`1 getResponse) ---内部异常堆栈跟踪的结束--- 位于Raven.Client.Connection.HttpJsonRequest.ReadStringInternal(Func`1 getResponse) 在Raven.Client.Connection.HttpJsonRequest.ReadResponseString()中 在Raven.Client.Connection.HttpJsonRequest.ReadResponseJson()上 位于Raven.Client.Connection.ServerClient.DirectPut(RavenJObject元数据,字符串键,null`1 etag,RavenJObject文档,字符串操作URL) 在Raven.Client.Connection.ServerClient.c\u显示Class10.b\u f(字符串u) 在Raven.Client.Connection.ServerClient.tryooperation[T](Func`2操作,字符串操作URL,布尔值避免抛出,T&result) 在Raven.Client.Connection.ServerClient.ExecuteWithReplication[T](字符串方法,Func`2操作)上 位于Raven.Client.Connection.ServerClient.Put(字符串键,可为null的`1 etag,RavenJObject文档,RavenJObject元数据) 在Raven.Client.Document.HiLoKeyGenerator.PutDocument(JsonDocument文档)中 在Raven.Client.Document.HiLoKeyGenerator.GetNextMax()中 在Raven.Client.Document.HiLoKeyGenerator.NextId()中 位于Raven.Client.Document.HiLoKeyGenerator.GenerateDocumentKey(DocumentConvention,对象实体) 在Raven.Client.Document.MultiTypeHiLoKeyGenerator.GenerateDocumentKey(DocumentConvention约定,对象实体) 在Raven.Client.Document.DocumentStore.c__DisplayClass1.b__0(对象实体)上 位于Raven.Client.Document.InMemoryDocumentSessionOperations.GetOrgeneratedDocumentKey(对象实体) 位于Raven.Client.Document.InMemoryDocumentSessionOperations.StoreInternal(对象实体,可空`1 etag,字符串id) 位于Raven.Client.Document.InMemoryDocumentSessionOperations.Store(对象实体) 在NServiceBus.Timeout.Hosting.Windows.Persistence.RavenTimeoutPersistence.Add(超时数据超时) 位于NServiceBus.Timeout.Core.TimeoutTransportMessageHandler.Handle(TransportMessage) 在NServiceBus.Unicast.Transport.Transactional.Transactional.OnTransportMessageReceived(TransportMessage消息)上
我已重新启动Raven服务和nservicebus主机。我曾尝试再次重现这一传奇,但它仍然发生

正在计划的超时状态消息很小:

<Messages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.net/Invoicing.Service">
    <IPartPaymentTimeout>
        <Amount>10.00</Amount>
        <OriginalTransactionTimeUtc>2013-01-14T05:49:04.8180938Z</OriginalTransactionTimeUtc>
        <PaymentNumber>7</PaymentNumber>
        <Id>123456</Id>
        <InvoiceNumber>1234567/34567</InvoiceNumber>
    </IPartPaymentTimeout>
</Messages>

10
2013-01-14T05:49:04.8180938Z
7.
123456
1234567/34567

在我的案例中,通过阻止New Relic安装自定义应用程序,解决了这一问题。New Relic中似乎存在一个bug,它在其中附加了一个请求头
X-NewRelic-ID
,该请求头会附加相同的数据,直到数据增长太长:

X-NewRelic-ID:,,…

在NewRelic.xml文件中禁用NServiceBus.Host的检测将阻止发送标头

在NewRelic.xml中,您还可以禁用
crossApplicationTracingEnabled

要检测此情况,请使用系统跟踪。诊断:

  <system.diagnostics>
<trace autoflush="true" />
<sources>
  <source name="System.Net" maxdatasize="1024">
    <listeners>
      <add name="MyTraceFile"/>
    </listeners>
  </source>
</sources>

<sharedListeners>
  <add
    name="MyTraceFile"
    type="System.Diagnostics.TextWriterTraceListener"
    initializeData="System.Net.trace.log"
            />
</sharedListeners>

<switches>
  <add name="System.Net" value="Verbose" />
</switches>


您能在fiddler中捕获原始http请求吗?如何让NServiceBus通过fiddler路由?@GlennSlaven您是否成功地使用fiddler捕获了原始http请求?仅供参考:原始报告非常陈旧,New Relic.NET Agent的更高版本不再存在此问题。@Scalayer我刚刚遇到过同样的问题今天的问题,所以很明显这根本不是固定的!