我们正在实施 Azure 服务总线中继以使用 WCF 服务,并且我们已成功使用来自 ASP.NET MVC 应用程序的服务总线使用服务。
我们想使用来自 AngularJS 的 Azure 服务总线中继来使用这些服务。
有什么方法可以从 AngularJS 访问 Azure 服务总线?还是我们需要编写额外的 API 层来使用服务总线使用服务?
请提供指导和指示。
我们正在实施 Azure 服务总线中继以使用 WCF 服务,并且我们已成功使用来自 ASP.NET MVC 应用程序的服务总线使用服务。
我们想使用来自 AngularJS 的 Azure 服务总线中继来使用这些服务。
有什么方法可以从 AngularJS 访问 Azure 服务总线?还是我们需要编写额外的 API 层来使用服务总线使用服务?
请提供指导和指示。
不,您不能从 AngularJS 代码连接到服务总线中继,因为 JavaScript 仅支持通过 HTTP 进行 Ajax 调用,其中服务总线中继通过 TCP 连接进行通信而不使用 HTTP。
您需要在应用程序中编写服务器端代码,通过 Azure 服务总线中继连接到 WCF 服务并与之通信。然后,您可以通过从客户端 AngularJS 代码向服务器端 Web 应用程序进行 Ajax 调用,向 AngularJS 代码公开您需要的任何数据和功能。
无论如何,您都有一个在服务器上运行的 Web 应用程序,因此集成它对您来说应该不是问题。
层和调用堆栈轮廓将是:
AngularJS 代码回调它所托管的 Web 应用程序
对 Web 应用程序的 Ajax 调用连接到服务总线中继
服务总线中继与 WCF 服务通信
WCF 服务处理方法调用并返回响应
服务总线中继将 WCF 方法响应发送回 Web 应用
Web App 向 AngularJS 代码返回 Ajax 响应
AngularJS 接收 Ajax 响应并执行它需要的结果。
此外,如果您可以直接从 Web 应用程序中的 AngularJS / JavaScript 代码调用服务总线中继,您仍然会遇到跨域起源问题,因为服务总线中继托管在与您的 Web 应用程序不同的域上。
尝试使用WebHttpRelayBinding
for 您的服务通过 HTTP 使用它:
https://msdn.microsoft.com/en-us/library/azure/microsoft.servicebus.webhttprelaybinding.aspx
@Chris Pietschmann 提出的 CORs 问题在这里仍然有效。如果您的服务设置它,不确定 Relay 是否会通过该标题。还要确保您允许未经身份验证的用户——您不想暴露您的安全令牌 =)