Sample: Azure aware custom plug-in
Applies To: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
This is a sample custom plug-in that can post the pipeline execution context to the Microsoft Azure Service Bus.
This sample code is for Microsoft Dynamics 365 (online & on-premises). Download the Microsoft Dynamics CRM SDK package. It can be found in the following location in the download package:
SampleCode\CS\Azure\Plug-ins\SandboxPlugin.cs
Requirements
For more information about the requirements for running the sample code provided in this SDK, see Use the sample and helper code.
Demonstrates
The plug-in demonstrates how to obtain the execution context and the tracing service from the service provider parameter of the Execute method. The plug-in then posts the context to the Microsoft Azure Service Bus endpoint and writes information to the trace log to facilitate debugging.
Example
using System;
using System.Diagnostics;
using System.Threading;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk;
namespace Microsoft.Crm.Sdk.Samples
{
/// <summary>
/// A custom plug-in that can post the execution context of the current message to the Windows
/// Azure Service Bus. The plug-in also demonstrates tracing which assist with
/// debugging for plug-ins that are registered in the sandbox.
/// </summary>
/// <remarks>This sample requires that a service endpoint be created first, and its ID passed
/// to the plug-in constructor through the unsecure configuration parameter when the plug-in
/// step is registered.</remarks>
public sealed class SandboxPlugin : IPlugin
{
private Guid serviceEndpointId;
/// <summary>
/// Constructor.
/// </summary>
public SandboxPlugin(string config)
{
if (String.IsNullOrEmpty(config) || !Guid.TryParse(config, out serviceEndpointId))
{
throw new InvalidPluginExecutionException("Service endpoint ID should be passed as config.");
}
}
public void Execute(IServiceProvider serviceProvider)
{
// Retrieve the execution context.
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// Extract the tracing service.
ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
if (tracingService == null)
throw new InvalidPluginExecutionException("Failed to retrieve the tracing service.");
IServiceEndpointNotificationService cloudService = (IServiceEndpointNotificationService)serviceProvider.GetService(typeof(IServiceEndpointNotificationService));
if (cloudService == null)
throw new InvalidPluginExecutionException("Failed to retrieve the service bus service.");
try
{
tracingService.Trace("Posting the execution context.");
string response = cloudService.Execute(new EntityReference("serviceendpoint", serviceEndpointId), context);
if (!String.IsNullOrEmpty(response))
{
tracingService.Trace("Response = {0}", response);
}
tracingService.Trace("Done.");
}
catch (Exception e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
}
}
}
See Also
IPlugin
IPluginExecutionContext
ITracingService
Sample code for Microsoft Dynamics 365 and Microsoft Azure integration
Sample: Azure aware custom workflow activity
Write a plug-in
Microsoft Dynamics 365
© 2016 Microsoft. All rights reserved. Copyright