具有 Javascript 客户端 (AngularJS) 的 azure 服务总线中继

azure service bus relay with Javascript client (AngularJS)

我们正在实施 Azure 服务总线中继来使用 WCF 服务,并且我们已经使用来自 ASP.NET MVC 应用程序的服务总线成功使用了服务。

我们想使用来自 AngularJS 的 Azure 服务总线中继使用此服务。

Is there any way to access Azure Service Bus from AngularJS? or do we need to write extra API layer to consume services using service bus?

请指点指点。

不,您无法从 AngularJS 代码连接到服务总线中继,因为 JavaScript 仅支持通过 HTTP 进行 Ajax 调用,其中服务总线中继通过 TCP 进行通信不使用 HTTP 的连接。

您将需要在您的应用程序中编写服务器端代码,以通过 Azure 服务总线中继连接到 WCF 服务并与之通信。然后,您可以通过从客户端 AngularJS 代码向服务器端 Web 应用程序发出 Ajax 调用,向 AngularJS 代码公开您需要的任何数据和功能。

您有一个在服务器上运行的 Web 应用程序,因此集成它对您来说应该不是问题。

图层和调用堆栈大纲为:[=​​10=]

  1. AngularJS 代码回调它托管在

  2. 中的 Web 应用程序
  3. Ajax 调用 Web 应用程序连接到服务总线中继

  4. 服务总线中继与 WCF 服务通信

  5. WCF 服务处理方法调用和returns响应

  6. 服务总线中继将 WCF 方法响应发送回 Web 应用程序

  7. Web 应用程序 returns Ajax 响应 AngularJS 代码

  8. AngularJS 接收到 Ajax 响应并因此执行所需的操作。

此外,如果您可以直接从 Web 应用程序中的 AngularJS / JavaScript 代码调用服务总线中继,您仍然会遇到跨域源问题,因为服务总线中继是托管在与您的 Web 应用程序不同的域上。

尝试使用 WebHttpRelayBinding 为您的服务通过 HTTP 使用它:

https://msdn.microsoft.com/en-us/library/azure/microsoft.servicebus.webhttprelaybinding.aspx

@Chris Pietschmann 提出的 CORs 问题在这里仍然有效。如果您的服务设置了 Relay,则不确定 header 是否会通过。还要确保您允许未经身份验证的用户——您不想暴露您的安全令牌 =)