Write a listener for a Microsoft Azure solution
Applies To: Dynamics CRM 2013
This topic describes how to write a listener that can read and process Microsoft Dynamics CRM 2013 messages that are posted to the Microsoft Azure Service Bus. As a prerequisite, you should familiarize yourself with how to write a Microsoft Azure Service Bus listener before trying to learn the specifics of a Microsoft Dynamics CRM listener. For more information, see the Azure Service Bus documentation and sample code.
In This Topic
Write a queue listener
Write a one-way, two-way, or REST listener
Filter messages
Write a queue listener
A message queue is a repository of messages received at a service bus endpoint. A queue listener is an application that reads and processes these queued messages. Because the service bus messages are stored in a queue, a listener doesn’t have to be actively listening in order for messages to be received in the queue. A queue listener can be started after messages have arrived in the queue and still process those messages. Other types of listeners discussed in the next section must be actively listening or they will miss the opportunity to read a message. These messages can originate from Microsoft Dynamics CRM or from some other source. When writing a queue listener, it is important to check each message header action to determine if the message originated from Microsoft Dynamics CRM.
You can do a destructive message read using Receive in ReceiveAndDelete mode, where the message is read and removed from the queue, or a non-destructive read using PeekLock mode, where the message is read but still available in the queue. The persistent queue listener sample code provided in this SDK does a destructive read. For more information about reading messages from a queue, see How to Receive Messages from a Queue.
A topic is similar to a queue but implements a publish/subscribe model. One or more listeners can subscribe to the topic and receive messages from its queue. More information: Queues, Topics, and Subscriptions
Important
Support for persistent queues and topics is supported. To use these contracts, you must write your listener applications using the Azure SDK version 1.7 or 1.8.
Message buffer queues are deprecated and won’t be supported in a future release of the Microsoft Dynamics CRM SDK.
Use of queues and topics in your multisystem software design can result in the decoupling of systems. If the listener application ever becomes unavailable, the message delivery from Microsoft Dynamics CRM will still succeed and the listener application can continue processing the queue message when it is back online. More information: ** **Queues, Topics, and Subscriptions.
Update a message buffer listener to use persistent queues
The following procedure lists the generic steps you would follow to update a listener application that retrieves message from a message buffer to one that receives message from a persistent queue.
On the Microsoft Azure portal and in the same solution, create a queue in the same path as was used for the message buffer.
Install the Microsoft Azure SDK version 1.7 or 1.8 on your development machine.
Update the listener code by removing the message buffer related classes and methods, and then replace them with QueueClient and Receive. Be sure to use the desired read mode: RetrieveAndDelete or PeekLock. For more information about reading messages from a queue, see Queues, Topics, and Subscriptions.
Build the listener application.
No Microsoft Dynamics CRM configuration changes are necessary as long as the queue endpoint uses the same solution path that the message buffer had used.
Write a one-way, two-way, or REST listener
In addition to the queue listener described previously, you can write a listener for three other service bus contracts that are supported by Microsoft Dynamics CRM: one-way, two-way, and REST. A one-way listener can read and process a message posted to the service bus. A two-way listener can do the same but can also return a string of some information back to CRM. A REST listener is the same as the two-way listener except that it works with a REST endpoint. Notice that these listeners must be actively listening at a service endpoint to read a message sent over the service bus. If the listener isn’t listening when Microsoft Dynamics CRM attempts to post a message to the service bus, the message doesn’t get sent.
Writing a listener is structured around what is known as ABC: address, binding, and contract. The following information identifies the ABCs of a one-way listener.
Address: service URI
Binding: WS2007HttpRelayBinding
Contract: IServiceEndpointPlugin
After your listener is registered with an endpoint, the listener’s Execute method is invoked whenever a message is posted to the service bus by Microsoft Dynamics CRM. The Execute method doesn’treturn any data from the method call. For more information, see the one-way listener sample, Sample: One-way listener.
A two-way listener is coded in a similar fashion as a one-way listener. The ABCs of a two-way listener are as follows:
Address: service URI
Binding: WS2007HttpRelayBinding
Contract: ITwoWayServiceEndpointPlugin
For this two-way contract, the Execute method returns a string from the method call. For more information, see the two-way listener sample, Sample: Two-way listener.
A REST listener is coded in a similar fashion as a two-way listener. The ABCs of a REST listener are as follows:
Address: service URI
Binding: WebHttpRelayBinding
Contract: IWebHttpServiceEndpointPlugin
For the REST contract, the Execute method returns a string from the method call. Refer to the REST listener sample, Sample: REST listener, for more information. Notice that in the REST listener sample, a WebServiceHost is instantiated and not a ServiceHost as was done in the two-way sample.
Note
When using the out-of-box (ServiceBusPlugin) plug-in with a two-way or REST listener, the plug-in doesn’t use any string data returned from the listener. However, a custom Azure-aware plug-in could make use of this information.
When you run the listener samples, the issuer secret you’re prompted for is the Microsoft Azure Service Bus management key. The WS2007 Federation HTTP binding uses “token” mode and the WS-Trust 1.3 protocol.
Filter messages
There is a property bag of extra information added to each brokered message Properties property sent from Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online. The property bag, available with persistent queue and topic contract endpoints, contains the following information.
Organization Url
Calling user ID
Initiating user ID
Entity logical name
Request name
This information identifies the organization, user, entity, and message request being processed by Microsoft Dynamics CRM that resulted in the service bus message being posted. Your listener code can choose to process a message it receives based on this information. More information: Sample: Execute multiple requests
See Also
Azure extensions for Microsoft Dynamics CRM 2013
Write a custom Azure-aware plug-in
Sample: Queue listener
Sample: Persistent queue listener
Sample: One-way listener
Sample: Two-way listener
Sample: REST listener
Send Microsoft Dynamics CRM 2013 data over the Azure Service Bus