a) Register TwoWay Endpoint
As we did many times, Copy the Connection String from Policy of Azure Service Bus.
Now copy in the Service End Point entry of Plug-in Registration Tool.
In resulting detail page, change do below changes;
a. Select TwoWay for the Designation Type
b. Add https: to Namespace Address
c. Give a name to Path.
b) Implement Listener
Now implement below Listener code in new Console Application.
Need to install below Nuget Packages;
a. Microsoft.Crm.Sdk.CoreAssemblies
b. WindowsAzure.ServiceBus
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 AsbListnerTwoWay { class Program { static void Main(string[] args) { string asbAccessKeyName = "Sum1ServiceBusPolicy"; string asbAccessKey = "7WxSLRMvYF0A3HbLUgfQeqIEb1eKsHgg5mrUwc="; string asbEndPoint = "https://sumeservicebus1.servicebus.windows.net"; var serviceHost = new ServiceHost(typeof(TwoWayServiceEndpoint)); var transportClient = new TransportClientEndpointBehavior(TokenProvider.CreateSharedAccessSignatureTokenProvider(asbAccessKeyName, asbAccessKey)); serviceHost.AddServiceEndpoint(typeof(ITwoWayServiceEndpointPlugin), new WS2007HttpRelayBinding(), asbEndPoint).EndpointBehaviors.Add(transportClient); serviceHost.Open(); Console.ReadLine(); } } public class TwoWayServiceEndpoint : ITwoWayServiceEndpointPlugin { string ITwoWayServiceEndpointPlugin.Execute(RemoteExecutionContext executionContext) { string message = executionContext.PrimaryEntityId.ToString(); Console.WriteLine("Record Id : {0}", message); return message; } } }
c) Implement Azure Aware Plug-in
Now read Service End Point Id by going to properties of the entry we created in first step as below;
..and implement a Plug-code (for Account Post Create). This code consist of Service End Point reference which uses the Id we read above.
using System; using Microsoft.Xrm.Sdk; namespace SumeTrial3Plugin { public class AccountPostCreate : IPlugin { public void Execute(IServiceProvider serviceProvider) { Guid serviceEndPointId = new Guid("63c5c746-e07d-e811-a967-000d3ad1c0d2"); IPluginExecutionContext pluginContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); IServiceEndpointNotificationService service = (IServiceEndpointNotificationService)serviceProvider.GetService(typeof(IServiceEndpointNotificationService)); try { tracingService.Trace("Passing Context to Service Endpoint"); string response = service.Execute(new EntityReference("serviceendpoint",serviceEndPointId), pluginContext); if (!String.IsNullOrEmpty(response)) { tracingService.Trace("response : {0}", response); } tracingService.Trace("Plug-in completed"); } catch (Exception ex) { tracingService.Trace("Error: {0}", ex.Message); throw; } } } }
Then register this plug-in as usual through Plug-in registration tool.
d) Test the operation
Now execute the Console Application (Listener) and Create an Account in Dynamics 365. You will notice below two;
1) Console Application/ Listener program pics the Context and write the Id.
2) If you check, Plug-in Trace Log, you will see the response has been retrieved by the Plug-in back.