从 CRM 插件订阅 Azure 服务总线主题

Azure Service Bus Topic subscribe from CRM plugin

我成功地将消息从 CRM 插件发布到 Azure 服务总线队列。理想情况下,我需要 CRM 来收听主题(订阅)并在接收时执行操作。我不知道这是否适用于 CRM,也找不到实施它的方法。我可以使用以下内容从队列中读取;

    MessagingFactory factory = MessagingFactory.CreateFromConnectionString(QueueConnectionString);

    //Receiving a message
    MessageReceiver testQueueReceiver = factory.CreateMessageReceiver(QueueName);
    while (true)
    {
        using (BrokeredMessage retrievedMessage = testQueueReceiver.Receive())
        {
            try
            {
                var message = new StreamReader(retrievedMessage.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();
                retrievedMessage.Complete();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                retrievedMessage.Abandon();
            }
        }
    }

但是,当用户操作执行插件时会调用它。我需要一直倾听。这可以通过 CRM 实现吗?我在本地使用 CRM 2016,消息总线托管在 Azure 中。

感谢您的指点。

CRM 不是一个始终监听的应用程序。它是由 HTTP 请求触发的 Web 应用程序。要弥合这一差距,您可以使用 Azure Functions。由于 Azure Function 可以由服务总线触发 并且 可以调用 Dynamics CRM。

您将需要创建部署由服务总线队列触发的 Azure 函数。这在以下位置有详细记录:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus

为您的 Azure 函数创建 package.json

{
"bindings": [
    {
    "queueName": "testqueue",
    "connection": "MyServiceBusConnection",
    "name": "myQueueItem",
    "type": "serviceBusTrigger",
    "direction": "in"
    }
],
"disabled": false
}

基本功能代码:

public static void Run(string myQueueItem, TraceWriter log)
{
    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}

完成此工作后,您可以构建 Azure Functions 代码以连接到 Dynamics CRM - 与任何其他代码一样。

将依赖项添加到 project.json(必须按照此处的讨论完全正确:http://crmtipoftheday.com/2016/12/12/connect-to-dynamics-365-in-azure-functions/):

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.CrmSdk.CoreAssemblies": "8.2.0",
        "Microsoft.CrmSdk.XrmTooling.CoreAssembly": "8.2.0"
      }
    }
  }
}

尼克的建议很完美。另一种方法是使用逻辑应用程序。 Dynamics 365 有一个可用的连接器,允许您在图形界面中执行 crud 操作。您不能在逻辑应用程序中编写代码,而在 Azure 函数中您可以使用代码实现您的逻辑。 Logic App 类似于 Dynamics 365 中的工作流,并且能够从队列或订阅中读取上下文。