Dynamics 365应用程序开发- 8.利用Dynamics 365中的Azure扩展

本章节详细介绍了Dynamics 365如何与Microsoft Azure集成,特别是通过Azure服务总线进行交互。内容包括Azure服务总线的基本概念、Dynamics 365中的Azure感知插件、配置Dynamics 365与Azure服务总线的集成以及编写不同类型的侦听器应用程序。此外,还提到了如何创建和配置队列、主题监听器,以及如何处理单向和双向通信。
摘要由CSDN通过智能技术生成

在上一章中,我们了解了如何在Dynamics365中使用新的RESTWebneneneba API端点来执行各种操作,以及如何使用它来开发自定义业务应用程序。在本章中,我们将了解Dynamics 365如何以本机方式支持与Microsoft Azure的集成。本章假定对微软Azure的基本原理有基本了解。

供Microsoft Azure参考

什么是 Azure - Microsoft 云服务 | Microsoft Azure

Microsoft Azure可以定义为一个云计算平台或基于云的服务集合,开发人员和IT专业人员可以通过全球各地的各种数据中心使用它来构建、测试、部署和管理应用程序。Microsoft Azure提供基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。

对于IaaS,我们基本上指的是Azure虚拟机,即托管在云上的服务器。云计算服务提供商,在这种情况下是微软,管理基础设施,我们需要为使用资源付费。在这里,我们拥有完全的控制权,并负责管理运行在那里的操作系统、中间件和应用程序。我们还可以在Microsoft Azure虚拟机中部署Dynamics 365内部部署。

有了PaaS,我们在云中有了一个完整的开发和部署环境,我们可以使用它在云中构建、部署和管理我们的应用程序。我们为我们正在使用的云服务付费。在这里,我们只管理我们的应用程序和服务,而云服务提供商管理其他一切。

有了SaaS,我们基本上可以通过互联网连接和使用软件或基于云的应用程序。
在这里,我们只需要为我们将要使用的基于云的应用程序付费。云服务提供商管理一切,无论是底层基础设施、中间件、应用软件等等。我们只需要连接到这些应用程序,主要是使用互联网上的网络浏览器来使用它们。Dynamics 365 Online属于SaaS。

 在本章中,我们将介绍以下几点:

  • 了解Azure与Dynamics 365的集成
  • 配置Azure与Dynamics 365的集成
  • 编写支持Azure的插件和不同的侦听器应用程序

了解Azure与Dynamics 365的集成

Microsoft Azure服务总线是Microsoft Azure堆栈中的主要组件,使我们能够将Dynamics 365与Microsoft Azure连接起来。通过Azure服务总线,我们可以将Dynamics 365内部执行的操作的详细信息传递给正在侦听该操作的多个应用程序,并可以读取和处理该信息。

Microsoft Azure服务总线简介

Azure服务总线可以定义为在Microsoft的Azure数据中心中运行的云消息服务。Azure服务总线使我们能够连接托管在云中或防火墙网络内的内部部署中的不同应用程序、服务或设备。它可以用于连接不同的业务线(LOB)应用程序、平板电脑、手机,甚至任何家用电器或传感器。此Azure服务总线支持两种不同的通信机制:代理消息传递(队列、主题和订阅)和中继服务。

Azure服务总线代理的消息传递功能包括可以在Microsoft的Azure数据中心中创建和托管的队列和主题。应用程序可以连接到创建的队列或主题,并向它们发送消息。这些消息将持久存储。
然后,接收应用程序可以连接到它们,并可以接收和处理消息。发送应用程序和接收应用程序可以托管在云中,也可以在本地。队列提供单向异步通信,其中发布者发布消息,订阅者接收消息。每个消息都由一个订户接收。主题还提供了单向异步消息传递基础结构,其中发布者发布消息,接收方像队列一样接收消息。主要区别在于,多个订阅者可以接收同一条消息,他们可以选择指定一些标准,以便只接收符合指定规则的消息。由于它们通过代理提供单向异步通信,即发送方和接收方之间没有直接连接,因此不适合我们希望发送方和接收方都交换消息或直接相互连接,或希望它们之间进行同步通信的情况。为了解决此问题,Azure服务提供中继。

Azure服务总线中继服务提供应用程序之间的双向同步通信功能,与队列和主题不同。中继服务允许我们在云中公开一个端点,该端点充当我们在云上托管的服务或本地服务的代理。然后,任何可以访问互联网的客户端都可以对该端点进行调用,这些调用会中继回防火墙后面的服务或任何其他侦听消息的应用程序。这为组织公开服务提供了一种非常可靠且具有成本效益的方式。

Azure服务总线文档

Azure Service Bus Messaging documentation | Microsoft Learn

了解Dynamics 365和Azure服务总线

在上一节中,我们介绍了Azure服务总线的基本知识,在本节中,将介绍Dynamics 365如何与Azure服务总线集成。 

下图显示了Dynamics 365如何与Azure服务总线一起工作,以连接到可以在云中或托管在防火墙后面的应用程序:

以下是对相同内容的逐步解释:

  1. Dynamics365用户在CRM内部执行操作,如创建潜在客户记录、更新机会等。
  2. 这会触发已注册的Azure感知OOB(开箱即用)插件或自定义Azure感知插件或工作流活动的执行,然后通知异步服务系统作业。
  3. 一旦异步服务接收到通知,它就会处理将请求消息的数据上下文发布到Azure服务总线。过帐是通过系统作业执行的。Dynamics 365用户可以在Dynamics 365 Web应用程序中检查系统作业的状态(设置|系统作业)。
  4. 然后,Microsoft Azure服务总线将执行上下文中继到Microsoft Azure服务总线侦听器应用程序。Azure服务总线还管理授权。通过使用访问控制服务(ACS)或共享访问签名(SAS)来授权将数据发布到服务总线的Dynamics 365以及读取数据的任何侦听器应用程序。
    Azure服务总线:身份验证和授权
    Azure Service Bus authentication and authorization - Azure Service Bus | Microsoft Learn
  5. 在Azure Service Bus解决方案终结点上注册的Microsoft Azure Service Bus侦听器应用程序可以读取和处理由Azure Service Bus发布的Dynamics 365执行上下文。
  6. Azure服务总线然后将相关系统作业的状态设置为已完成。

SAS授权在CRM Online 2016 Update 1中引入,性能优于ACS。SAS是Dynamics 365的推荐授权方法。请参阅此处,以将服务端点从ACS更新为SAS授权

Walkthrough: Update a service endpoint from ACS to SAS authorization | Microsoft Learn

了解Azure感知插件

正如我们之前看到的,我们可以针对Dynamics365中的特定事件注册一个Azure感知插件,然后该插件将此执行上下文传递给Azure服务总线,后者将其转发给侦听器应用程序。在这里,我们可以使用OOB Azure感知插件,也可以编写自己的自定义Azure感知插件或自定义工作流活动。

使用Dynamics 365 Online 9.0版,我们可以使用Webhook作为Azure Service Bus的替代方案,将有关事件的数据发送到web应用程序

Use webhooks to create external handlers for server events(Developer Guide for Dynamics 365 Customer Engagement (on-premises)) | Microsoft Learn

对于OOB Azure感知插件,我们需要首先通过插件注册工具注册新的服务端点:

在服务端点注册中,我们需要指定一个到Azure service Bus的连接,我们希望将插件事件传递到该连接:

服务端点保存有关Azure服务总线的授权信息,例如服务总线命名空间地址和SAS密钥。成功注册后,我们可以向添加的服务端点添加插件步骤,就像我们对常用插件程序集所做的那样。

此支持Azure的OOB插件在完全信任的情况下执行。然而,OOB Azure感知插件存在某些限制,例如它只能异步运行,不能调用CRM SDK方法,并且不能编写用于日志记录或审计目的的跟踪语句。

除了Dynamics 365提供的OOB Azure感知插件外,我们还可以创建自己的自定义Azure感知插件或自定义工作流活动。

传递给IPlugin的Execute方法的IServiceProvider包含IServiceEndpointNotificationService的实例。我们可以调用它的Execute方法来将执行上下文发布到Azure服务总线。Execute方法需要服务端点的实体引用;我们可以从插件注册工具中获取服务端点ID。添加此代码以调用端点通知服务使我们的插件Azure知道:

public class AzureAwarePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// set the Service Endpoint Id
var serviceEndpointId = "[ServiceEndpointGuid]";
// Obtain the execution context from the service provider.
IPluginExecutionContext context = (IPluginExecutionContext)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Martin-Mei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值