Azure Service Bus文件流

时间:2013-05-10 16:44:54

标签: azure servicebus azureservicebus azure-servicebusrelay

我的服务器上运行了一个小的控制台服务,它将端点暴露给天蓝色的服务总线命名空间。我在流模式下使用webHttpRelayBinding。我正在使用仅用于测试的微软样本:http://code.msdn.microsoft.com/windowsazure/Relayed-Messaging-Bindings-a6477ba0#content

我有一个控制台应用程序客户端在另一台计算机上运行,​​该计算机连接到我的服务总线命名空间并调用我的服务接口。我正在使用示例调用GetImage,在该方法中我所做的就是返回一个5MB PDF文件的流。

在托管我服务的服务器上,我有一个20MB的上传/下载光纤线路。它开阔而且非常快。当我打开浏览器并点击我的服务时:https://namespace.servicebus.windows.net/Image/GetImage它正确地拉出5MB PDF文件,但它只会以每秒90K到100K的速度将文件传输给我。我一开始以为我受到服务器上传速度的限制,但是上下20MB的光纤很难证明是合理的。所以我将服务移动到了我的家用电脑,上传速度低至750K。我启动了服务,接收了中继。然后我让我的一个朋友从他家的浏览器点击服务,拉出相同的5MB PDF文件,并且看到它以每秒90K到100K的速度将文件传输给他。

我很难过为什么会这样。有人可以在这里给我一些见解吗?我可以向您展示您需要的所有代码,但认为足以完全解释问题并引用我正在使用的微软样本。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

稍后的回复我发现这个问题与我现在正在做的事情有关。

根据建议,我建议使用混合连接模式尝试NetTcpRelayBinding。

http://msdn.microsoft.com/en-us/library/microsoft.servicebus.tcprelayconnectionmode.aspx

默认情况下,NetTcpRelayBinding使用Relay,这意味着流量通过Azure。在Hybrid中,仅通过Azure完成握手,然后建立直接连接。请记住,虽然使用混合设置会丢失传输安全性,这可能需要也可能不需要设置消息级安全性。

如果您尝试这种方法,请告知我们提速。

谢谢!

答案 1 :(得分:0)

需要考虑的一些事项:

  • 使用服务总线中继时,在最差的连接条件下(双方NAT,防火墙,没有直接连接),您的所有请求都将通过Service Bus的数据中心。虽然服务器的下载/上传速度很重要,但您还应该考虑数据中心的网络功能。你在哪里主持你的接力?您是否尝试过使用离您和您的用户更近的数据中心?

  • 您是如何托管服务的,是WCF还是IIS?您可能希望在没有接力的情况下进行基准测试,以确认减速确实来自SB,而不是其他一些因素。

  • 您是否仅限于使用基于http的协议?如果你使用netTcpRelayBinding,你可能会有更好的性能(虽然我不完全确定它的流功能)。