Azure Service Bus中继响应缓慢

时间:2013-08-01 07:36:38

标签: wcf azure azureservicebus

我在Azure中托管了一个Azure Service Bus Relay,它公开了类似于下面的端点: https://myTestSB.servicebus.windows.net/MyService/LogIn()

有趣的是,当我打电话给这个服务总线时,它会进行4次调用,如下所示。 这导致响应缓慢。

有人可以 澄清发生了什么 每次通话?首先呼叫#1必须等待2,3和4吗?

1(需要很长时间)

GET https://myTestSB.servicebus.windows.net/MyService/LogIn()?$filter=UserID eq '1234' and Password eq 'secret'
User-Agent: Microsoft ADO.NET Data Services
.....
Status Code: OK 200
...

2

CONNECT https://myTest-sb.accesscontrol.windows.net/WRAPv0.9/

Status Code: OK 200
Connection: Keep-Alive
Proxy-Connection: Keep-Alive

3

POST https://TestSB-sb.accesscontrol.windows.net/WRAPv0.9/
Content-Type: application/x-www-form-urlencoded
Host: TestSB-sb.accesscontrol.windows.net
Content-Length: 307
Expect: 100-continue
Connection: Keep-Alive

Status Code: OK 200
.......

4

CONNECT https://myTestSB.servicebus.windows.net/MyService/LogIn()?$filter=UserID eq '1234' and Password eq 'secret'

Status Code: OK 200
Connection: Keep-Alive
Proxy-Connection: Keep-Alive

登录服务总线需要5-10秒,在本地环境中只需不到一秒钟。不确定Service Bus为何以及如何添加延迟。

2 个答案:

答案 0 :(得分:1)

默认情况下, Azure Service Bus Relay 通常通过 ACS Access Control Services )使用选择加入身份验证。为了使用中继端点 - 它必须首先使用ACS令牌授权WCF信道。如果您选择不将ACS用作you are providing your own relay access control,则可以通过配置删除您看到的额外呼叫。

禁用服务总线中继的ACS(选择退出)

<bindings>
  <netTcpRelayBinding>
    <binding name="default">
      <security relayClientAuthenticationType="None" />
    </binding>
  </netTcpRelayBinding>
</bindings>

有关详细信息,请参阅MSDN on securing Azure Service Bus Connections

至于延迟问题( 5-10秒) - 这一切都取决于所使用的WCF调用的数量,您与数据中心的关系以及共享的数据量。有很多选项可以调整以上所有内容。还ensure you have configured your firewall properly for establishing Azure Relay communication

答案 1 :(得分:1)

Myagdi,您是否正在为服务和客户端使用 WebHttpRelayBinding ?您正在使用的SDK版本是什么?

请注意,使用服务总线中继时,会发生2层身份验证。客户端必须首先使用ACS对Service Bus Relay端点进行身份验证,然后针对本地WCF服务执行任何特定于应用程序的身份验证。

您看到的额外流量是由于客户端从ACS获取令牌以对服务总线中继进行身份验证。现在,默认情况下,ACS发出的令牌的生命周期为20分钟到3小时。如果您使用我们的.NET SDK,那么在大多数情况下,客户端将在其生命周期内缓存令牌。因此,在此令牌生存期内对中继端点的后续请求不应导致与ACS进行额外的交换以进行令牌获取。

此外,由于服务总线中继设计,由于控制通信,从客户端到侦听器服务的第一个请求通常会导致更高的延迟。后续呼叫的延迟通常较低。

如果您有其他问题/疑问,可以通过@ santoshc1与我联系。