在 Dynamics CRM 编程中,我应该向我的应用程序提取数据还是推送通知?

In Dynamics CRM Programming, Should I pull for data or Push Notifications to my App?

大家好!

我为 Dynamics CRM 编写了一段时间的代码,现在我需要为其制作一个特殊的程序。我正在考虑利用工作流程和 windows 服务。

在我的架构中, 每当特定工作流程运行时,它都会在 CRM 中创建一条 "object creation request" 记录。 驻留在同一服务器上的 windows 服务必须收到此对象的通知,加载它,处理它并将结果放回 CRM。

问题留在这里。 每当创建记录时,我应该...

  1. 使用 wcf 从插件或工作流调用我的 windows 服务 或者
  2. 让我的 windows 服务每隔几秒提取一次新记录数据。

在任何一种选择中,任何想法都将受到热烈欢迎。 谢谢大家。

我不会使用这两种方法中的任何一种。

我会使用 Microsoft Message Queue (MSMQ) 来处理通信。 MSMQ 可用于 install on Windows Server

插件应将消息放入队列中。

windows 服务应侦听队列中的消息并在收到消息时进行处理。

网上有大量关于通过 C# 使用 MSMQ 的文档,但 here is the bare minimum:

//Send Message
MessageQueue messageQueue = null;
if (MessageQueue.Exists(@".\Private$\SomeTestName"))
{
    messageQueue = new MessageQueue(@".\Private$\SomeTestName");
    messageQueue.Label = "Testing Queue";
}
else
{
    // Create the Queue
    MessageQueue.Create(@".\Private$\SomeTestName");
    messageQueue = new MessageQueue(@".\Private$\SomeTestName");
    messageQueue.Label = "Newly Created Queue";
}
messageQueue.Send("First ever Message is sent to MSMQ", "Title");

//Receive Message
MessageQueue messageQueue = new MessageQueue(@".\Private$\SomeTestName");
System.Messaging.Message[] messages = messageQueue.GetAllMessages();

foreach (System.Messaging.Message message in messages)
{
    //Do something with the message.
}
// after all processing, delete all the messages
messageQueue.Purge();

这样做的原因是它分离了插件和 windows 服务,并且消除了不断轮询 CRM 以获取记录的需要。