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"
}
}
}
}
哇 - 感谢您的非常完整的答案!很有帮助。正是我需要的。 – creatiive