예제 #1
0
        private void ProcessNotification(CancellationToken cancellationToken, PluginMessageRequest request)
        {
            try
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                if (!WebNotificationCryptography.ValidateRequest(request.Authorization))
                {
                    WebNotificationEventSource.Log.AuthorizationValidationFailed();

                    return;
                }

                var message = this.GetMessage(request);

                if (message == null)
                {
                    WebNotificationEventSource.Log.MessageInvalid();

                    return;
                }

                CacheInvalidation.ProcessMessage(message);

                if (SearchIndexApplicableMessages.Contains(message.MessageName, MessageComparer))
                {
                    var serviceContext = CrmConfigurationManager.CreateContext();
                    SearchIndexBuildRequest.ProcessMessage(message, serviceContext: serviceContext);
                }
            }
            catch (TaskCanceledException e)
            {
                ADXTrace.Instance.TraceWarning(TraceCategory.Application, e.Message);
            }
        }
예제 #2
0
        public override async Task Invoke(IOwinContext context)
        {
            if (Equals(context.Request.Path, this.Options.CallbackPath))
            {
                var request = new PluginMessageRequest
                {
                    Authorization = context.Request.Headers["Authorization"],
                    ContentType   = context.Request.ContentType,
                    Body          = context.GetRequestBody()
                };

                var message = this.GetPluginMessage(request.Body);

                if (message != null && WebNotificationCryptography.ValidateRequest(request.Authorization))
                {
                    ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Posting message");

                    await this.PostAsync(context, message).WithCurrentCulture();
                }
            }

            await this.Next.Invoke(context);
        }