Sample: Azure Aware Custom Plug-In

[Applies to: Microsoft Dynamics CRM 2011]

This is a sample custom plug-in that can post the pipeline execution context to the Windows Azure Service Bus.

This sample code is for Microsoft Dynamics CRM 2011, and can be found in the following location in the SDK download:



For more information about the requirements for running the sample code provided in this SDK, see Use the Sample and Helper Code.


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 Windows Azure Service Bus endpoint and writes information to the trace log to facilitate debugging.


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.");

				tracingService.Trace("Posting the execution context.");
				string response = cloudService.Execute(new EntityReference("serviceendpoint", serviceEndpointId), context);
				if (!String.IsNullOrEmpty(response))
					tracingService.Trace("Response = {0}", response);
			catch (Exception e)
				tracingService.Trace("Exception: {0}", e.ToString());

See Also

Microsoft Dynamics CRM 2011
Send comments about this topic to Microsoft.
© 2013 Microsoft Corporation. All rights reserved.

Community Additions