Delen via


Een aangepaste Azure-bewuste invoegtoepassing schrijven

 

Gepubliceerd: januari 2017

Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Een invoegtoepassing schrijven die werkt met Microsoft Azure lijkt op het schrijven van elke andere Microsoft Dynamics 365-invoegtoepassing. Naast het aanroepen van eventuele gewenste webservicemethoden, moet de invoegtoepassing code bevatten om het verzenden van de uitvoeringscontext naar de Microsoft Azure Service Bus te initiëren.

In dit onderwerp

Overwegingen bij het ontwerp van invoegtoepassingen

De invoegcode schrijven

Registratie van invoegtoepassingen

Een mislukt servicebusbericht afhandelen

Overwegingen bij het ontwerp van invoegtoepassingen

Voor een invoegtoepassing die synchroon wordt uitgevoerd, is het aanbevolen ontwerp dat de invoegtoepassing een bericht verzendt naar Microsoft Azure om informatie op te halen van een listenertoepassing of een andere externe service. Gebruik van een bidirectioneel of REST-contract op het Microsoft Azure Service Bus-eindpunt maakt mogelijk dat een gegevenstekenreeks wordt geretourneerd aan de invoegtoepassing.

Het wordt niet aanbevolen dat een synchrone invoegtoepassing de Microsoft Azure Service Bus gebruikt om gegevens bij te werken met een externe service. Er kunnen zich problemen voordoen als de externe service niet beschikbaar is of als er veel gegevens moeten worden bijgewerkt. Synchrone invoegtoepassingen moeten snel worden uitgevoerd en niet alle aangemelde gebruikers van een organisatie ophouden wanneer er een langdurige bewerking wordt uitgevoerd. Als er bovendien een terugdraaibewerking plaatsvindt van de huidige kernbewerking die de invoegtoepassing heeft aangeroepen, worden eventuele gegevenswijzigingen die door de invoegtoepassing zijn aangebracht, ongedaan maken. Hierdoor kunnen Microsoft Dynamics 365 en een externe service zich in een ongesynchroniseerde staat bevinden.

Houd er rekening mee dat synchrone, geregistreerde invoegtoepassingen de uitvoeringscontext kunnen verzenden naar Microsoft Azure Service Bus.

De invoegcode schrijven

In het volgende voorbeeld is invoegcode toegevoegd om de Microsoft Azure-gegevensprovider te verkrijgen en het verzenden van de uitvoeringscontext naar de servicebus te initiëren door Execute aan te roepen. Er is traceringscode toegevoegd om foutopsporing van de invoegtoepassing te vergemakkelijken omdat de invoegtoepassing in de sandbox moet worden uitgevoerd.


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;
            }
        }
    }
}

In uw invoegcode kunt u de schrijfbare gegevens in de context bijwerken voordat u het bericht initieert. U kunt bijvoorbeeld een sleutel/waarde-paar toevoegen aan de gedeelde variabelen in de context.

Registratie van invoegtoepassingen

Er zijn enkele beperkingen wanneer u een Microsoft Azure-bewuste aangepaste toepassing registreert. De invoegtoepassing moet worden geregistreerd om in de sandbox te worden uitgevoerd. De invoegtoepassing is daarom beperkt tot het aanroepen van Microsoft Dynamics 365 SDK-methoden, Microsoft Azure-oplossingsmethoden of het verkrijgen van toegang tot het netwerk met een webclient. Er is geen andere externe toegang, zoals toegang tot een lokaal bestandssysteem, toegestaan.

Voor een invoegtoepassing die is geregistreerd om in de asynchrone modus te worden uitgevoerd, betekent dit ook dat de volgorde van uitvoering van de invoegtoepassing vergeleken met andere asynchrone invoegtoepassingen niet gegarandeerd is. Bovendien worden asynchrone invoegtoepassingen altijd na de Microsoft Dynamics 365-kernbewerking uitgevoerd.

Een mislukt servicebusbericht afhandelen

Het verwachte gedrag van een mislukt servicebusbericht is afhankelijk van of de invoegtoepassing is geregistreerd voor synchrone of asynchrone werking. Voor asynchrone invoegtoepassingen probeert de systeemtaak die de uitvoeringscontext daadwerkelijk naar de servicebus verzendt, het bericht opnieuw te verzenden. Voor een synchroon geregistreerde invoegtoepassing wordt een uitzondering geretourneerd.Meer informatie:Beheer van runtimefouten

Belangrijk

Alleen voor asynchroon geregistreerde invoegtoepassingen geldt dat als na een mislukte verzending opnieuw wordt geprobeerd de asynchrone taak die het bericht naar de Microsoft Azure Service Bus verzendt, uit te voeren, de volledige logica van de invoegtoepassing opnieuw wordt uitgevoerd. Daarom voegt u geen andere logica aan de aangepaste, Microsoft Azure-bewuste invoegtoepassing toe dan alleen de context te wijzigen en te verzenden naar de servicebus.

Voor een invoegtoepassing die is geregistreerd om asynchroon te worden uitgevoerd, bevat de RemoteExecutionContext in de tekst van het bericht dat via de servicebus wordt verzonden, een OperationId-eigenschap en een OperationCreatedOn-eigenschap. Deze eigenschappen bevatten dezelfde gegevens als de kenmerken AsyncOperationId en CreatedOn van de gerelateerde systeemtaakrecord (AsyncOperation). Deze aanvullende eigenschappen maken sequentiëring en duplicatendetectie mogelijk als het Microsoft Azure Service Bus-bericht opnieuw moet worden geprobeerd.

Zie ook

Azure-extensies voor Microsoft Dynamics 365
Werken met Dynamics 365-gegevens in uw Azure-oplossing
Een invoegtoepassing schrijven
Isolatie, trusts en statistieken van invoegtoepassingen
Pipeline voor gebeurtenisuitvoering
Plug-ins registreren en inzetten

Microsoft Dynamics 365

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht