1) Create a Service Policy in ASB
This time create a Shared Access Policy for Azure Service Bus in root level.
Once created, we can see all the details once open it. Copy Primary Connection String of the Policy.
2) Register Service End Point
Now Open the Plug-in Registration Tool and go to Register > New Service Endpoint which results a pop-up. Now paste the Primary Connection String we copied in previous step.
Now do below changes in resulting Service Endpoint entry;
a. Select OneWay for the Designation Type
b. Add https: to Namespace Address
c. Give a name to Path.
Now register a step for Lead entity for Create message. Make sure you register this in Asynchronous mode.
Now go to D365 and create a Lead record and check System Jobs, where you will notice an exception since there is no listener for endpoint as below;
3) Implement Listener to Endpoint
Let's implement a listener for the endpoint through a Console Application.
For that below NuGet Packages needed to be installed;
a. Microsoft.Crm.Sdk.CoreAssemblies
b. WindowsAzure.ServiceBus
Also notice that we have used Policy Name and Key (i.e. Primary Key) from the Policy we created.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Xrm.Sdk; using Microsoft.ServiceBus.Messaging; using System.Runtime.Remoting.Contexts; using System.ServiceModel; using Microsoft.ServiceBus; namespace AzureServiceBusListener { class Program { static void Main(string[] args) { string asbAccessKeyName = "Sum1ServiceBusPolicy"; string asbAccessKey = "7WxSLRMvYF0myA3HbLUgfQeqIEb1eKsHgg5mrUwc="; string asbEndPoint = "https://sumeservicebus1.servicebus.windows.net"; var serviceHost = new ServiceHost(typeof(TestRemoteService)); var transportClient = new TransportClientEndpointBehavior( TokenProvider.CreateSharedAccessSignatureTokenProvider(asbAccessKeyName, asbAccessKey)); serviceHost.AddServiceEndpoint(typeof(IServiceEndpointPlugin), new WS2007HttpRelayBinding(), asbEndPoint).EndpointBehaviors.Add(transportClient); serviceHost.Open(); Console.ReadLine(); } } public class TestRemoteService : IServiceEndpointPlugin { public void Execute(RemoteExecutionContext executionContext) { Console.WriteLine("Entity Name : {0}, Record Id : {1}", executionContext.PrimaryEntityName, executionContext.PrimaryEntityId); } } }
Now run this program and start Creating Leads. Now you will notice Listener is picking the context each time a new Lead is Created.
References;
https://blogs.msdn.microsoft.com/swetagu/2016/04/12/crm-azure-service-endpoint-and-listener-deep-dive/
https://nishantrana.me/2017/03/22/configure-dynamics-365-and-azure-service-bus-integration-using-oneway-relay-and-listener/
https://msdn.microsoft.com/en-us/library/gg334377.aspx
No comments:
Post a Comment