コード例 #1
0
        private OrganizationServiceCachePluginMessage GetMessage(PluginMessageRequest request)
        {
            if (!request.ContentType.StartsWith("application/json", StringComparison.InvariantCultureIgnoreCase))
            {
                WebNotificationEventSource.Log.ContentTypeInvalid();

                return(null);
            }

            return(this.GetPluginMessageFromJsonRequest(request.Body));
        }
コード例 #2
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);
            }
        }
コード例 #3
0
        public void ProcessRequest(HttpContext context)
        {
            var portalConfigType = ConfigurationManager.AppSettings["PortalConfigType"];
            var response         = context.Response;

            if (string.IsNullOrWhiteSpace(context.Response.Headers.Get("Access-Control-Allow-Origin")))
            {
                response.AppendHeader("Access-Control-Allow-Origin", "*");
            }
            else
            {
                response.Headers["Access-Control-Allow-Origin"] = "*";
            }

            if (string.IsNullOrWhiteSpace(context.Response.Headers.Get("Access-Control-Allow-Methods")))
            {
                response.AppendHeader("Access-Control-Allow-Methods", "GET");
            }
            else
            {
                response.Headers["Access-Control-Allow-Methods"] = "GET";
            }

            if (portalConfigType == "online")
            {
                var onlineEnabled = "WebNotifications.Enabled".ResolveAppSetting().ToBoolean().GetValueOrDefault();

                if (!onlineEnabled)
                {
                    ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Web Notifications are not enabled.");

                    response.StatusCode        = 404;
                    response.StatusDescription = "Not Found";
                    response.ContentType       = "text/plain";
                    response.Write("Not Found");
                    response.End();

                    return;
                }

                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Web Notifications are enabled with cloud application setting 'WebNotifications.Enabled'.");
            }

            if (context.Request.HttpMethod == "GET")
            {
                response.StatusCode        = 200;
                response.StatusDescription = "OK";
                response.ContentType       = "text/plain";
                response.Write("OK");
                response.End();

                return;
            }

            var request = new PluginMessageRequest
            {
                Authorization = context.Request.Headers["Authorization"],
                ContentType   = context.Request.ContentType,
                Body          = context.GetOwinContext().GetRequestBody()
            };

            HostingEnvironment.QueueBackgroundWorkItem(cancellationToken => ProcessNotification(cancellationToken, request));
        }