如何在Windows Server Service Bus中调整BrokeredMessage的最大邮件大小?

时间:2013-10-18 13:46:45

标签: c# .net servicebus windows-server

我在运行Windows Server 2008 R2 Datacenter的VM上设置了Windows Server Service Bus 1.0。

我已经编写了一个控制台应用程序来发送和接收消息,这很有效。

我一直在发送成功增加大小的消息,但是当获得5,226,338字节(我认为5,226,154字节消息体+ 184字节头)时,控制台应用程序当前已经崩溃了,这个数据不到5MB。理想情况下,我们需要更多的空间来玩。

一些堆栈跟踪如下......

  

未处理的例外情况:   Microsoft.ServiceBus.Messaging.MessagingCommunicationException:The   套接字连接中止。这可能是由错误引起的   处理您的消息或超过接收超时   远程主机或底层网络资源问题。本地套接字   超时为'00:01:09.2720000'。 - - >   System.ServiceModel.CommunicationException:套接字连接是   中止。这可能是由处理您的消息或错误导致的   接收远程主机或基础主机超时超时   网络资源问题。本地套接字超时为'00:01:09.2720000'。   ---> System.IO.IOException:写入操作失败,请参阅内部异常。 ---> System.ServiceModel.CommunicationException:套接字   连接中止。这可能是由错误处理引起的   您的消息或远程主机超出接收超时,   或潜在的网络资源问题。本地套接字超时是   '00:01:09.2720000'。 ---> System.Net.Sockets.SocketException:An   建立的连接被主机中的软件中止   机

Windows Azure Service Bus显然具有256KB的固定限制,但内部部署Windows Server Service Bus的限制为50MB。请参阅以下文章。

提及Azure限制为256KB - http://msdn.microsoft.com/en-us/library/windowsazure/hh694235.aspx

提及50MB - http://msdn.microsoft.com/en-us/library/windowsazure/jj193026.aspx

我正在努力达到50MB的限制,并且想知道我是否需要做某些事情来以某种方式配置它,或者可能需要以某种方式发送消息。我注意到上面的文章中有一个参数名称,并想知道是否可以在PowerShell中使用它。

我一直在努力在网上找到一些好的信息。有一些与Azure Service Bus有关的文章,但与Windows Server Service Bus有关的其他文章有很多混淆。

有Service Bus 1.1,但我认为目前正处于预览状态,我不确定这会有所帮助。

我使用类似下面的代码发送消息。

namespaceManager = NamespaceManager.Create(); messagingFactory = MessagingFactory.Create();

queueClient = messagingFactory.CreateQueueClient(queueName);

queueClient.Send(new BrokeredMessage(new string('x',5226154)));

这是从以下文章的组合中获得的,第一个略微过时,第二个使得需要更改的内容稍微清楚一些,以便让事情有效。

http://haishibai.blogspot.co.uk/2012/08/walkthrough-setting-up-development.html

http://msdn.microsoft.com/en-us/library/windowsazure/jj218335(v=azure.10).aspx

我希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,但经过几次尝试后我才发现它。

只需打开文件

C:\Program Files\Service Bus\1.1\Microsoft.ServiceBus.Gateway.exe.config

并使用名称netMessagingProtocolHead set

更改nettcp绑定
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647"

并重新启动所有服务总线服务。

现在我能够发送和接收大小为new string('A', 49 * 1024 * 1024)的消息。

享受: - )

马丁

答案 1 :(得分:1)

您获得的例外是超时,因此您最好的选择可能是稍微调整一下您的超时。您是否尝试将客户端超时设置为更高的值?您可以通过MessagingFactorySettings对象执行此操作。另外,您是否检查过服务器端日志以查看是否有任何线索可以提供线索?

您提到的参数是设置配额。当您发送的邮件超过配额时,应立即拒绝。在您的情况下,邮件正在被接受,但在传输过程中显然会超时。