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

问题描述:

我成功地将消息从CRM插件发布到Azure服务总线队列。理想情况下,我需要CRM来收听主题(订阅)并对接收进行操作。我不知道CRM是否可行,并且找不到实施它的方法。我可以从下面的队列中读取;Azure服务总线主题从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函数。由于可以通过服务总线触发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的功能代码连接到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" 
     } 
    } 
    } 
} 
+0

哇 - 感谢您的非常完整的答案!很有帮助。正是我需要的。 – creatiive