1

我成功地將消息從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中託管消息總線。

感謝您的指點。

回答

2

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

相關問題