2

我的服务器上运行了一个小控制台服务,它将它的端点暴露给一个天蓝色的服务总线命名空间。我在流模式下使用 webHttpRelayBinding。我正在使用 Microsoft 示例进行测试,位于此处: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 的速度将文件传输给他。

我很困惑为什么会这样。有人可以在这里给我见解吗?我可以向您展示您需要的所有代码,但我认为完全描述问题并参考我正在使用的微软示例就足够了。

先感谢您。

4

2 回答 2

1

很久以后的回复,但是我发现这个问题与我现在正在做的事情有关。

正如建议的那样,我建议尝试使用混合连接模式的 NetTcpRelayBinding。

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

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

如果您尝试这种方法,请让我们知道速度会提高。

谢谢!

于 2013-06-06T20:19:39.837 回答
0

有几点需要考虑:

  • 使用服务总线中继时,在最差的连接条件下(两侧都有 NAT、防火墙、无直接连接),您的所有请求都将通过服务总线的数据中心。虽然服务器的下载/上传速度很重要,但您还应该考虑介于两者之间的数据中心的网络功能。您在哪里托管中继?您是否尝试过使用离您和您的用户更近的数据中心?

  • 您如何托管您的服务,是 WCF 还是在 IIS 上?您可能希望在不涉及中继的情况下进行基准测试,以验证减速确实来自 SB,而不是其他一些因素。

  • 您是否仅限于使用基于 http 的协议?如果您使用 netTcpRelayBinding 代替,您可能会获得更好的性能(尽管我不完全确定它的流媒体功能)。

于 2013-05-25T01:46:39.740 回答