【问题标题】:Azure Service Bus Topic subscribe from CRM plugin从 CRM 插件订阅 Azure 服务总线主题
【发布时间】:2017-02-27 16:03:43
【问题描述】:

我成功地将消息从 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 中。

感谢您的任何指点。

【问题讨论】:

    标签: c# azure dynamics-crm-2011 dynamics-crm-2013 azureservicebus


    【解决方案1】:

    CRM 不是一个始终倾听的应用程序。它是由 HTTP 请求触发的 Web 应用程序。要弥合这一差距,您可以使用 Azure Functions。由于 Azure 函数可以由服务总线触发并且可以调用 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 Function 代码以连接到 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"
          }
        }
      }
    }
    

    【讨论】:

    • 哇 - 感谢您非常完整的回答!很有帮助。正是我需要的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 2016-02-10
      • 2016-12-29
      • 1970-01-01
      • 2019-02-12
      • 2017-10-23
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多