1

我在 Azure 中托管了一个 Azure 服务总线中继,它公开了类似于以下的端点: 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 秒,而在本地环境中只需不到一秒。不确定服务总线为何以及如何增加延迟。

4

2 回答 2

1

默认情况下,Azure 服务总线中继通常使用通过ACS访问控制服务)的选择加入身份验证。为了使用中继端点 - 它必须首先使用 ACS 令牌授权 WCF 通道。如果您选择不使用 ACS,您看到的额外呼叫可以通过配置删除,因为您提供自己的中继访问控制

为服务总线继电器禁用 ACS(退出)

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

有关更多详细信息,请参阅有关保护 Azure 服务总线连接的 MSDN

至于延迟问题(5-10 秒)——这完全取决于使用的 WCF 调用的数量、您与数据中心的关系以及共享的数据量。有许多选项可以调整以上所有内容。还要确保您已正确配置防火墙以建立 Azure 中继通信

于 2013-08-01T12:28:15.157 回答
1

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

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

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

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

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

于 2013-08-09T22:20:41.010 回答