/// <summary>
        /// Factory method that generates an ICrmSubscriptionMessage
        /// </summary>
        /// <param name="message">BrokeredMessage</param>
        /// <returns>ICrmSubscriptionMessage</returns>
        public static ICrmSubscriptionMessage Create(BrokeredMessage message)
        {
            if (message == null)
            {
                return(null);
            }

            string messageBody = message.GetBody <string>();

            if (messageBody == null)
            {
                return(null);
            }

            ADXTrace.Instance.TraceWarning(TraceCategory.Application, string.Format("Message Body for Subscription message is {0} ", messageBody.ToString()));

            ICrmSubscriptionMessage subscriptionMessage = CrmSubscriptionMessageFactory.Create(messageBody, message);

            if (subscriptionMessage != null)
            {
                CmsEventSource.Log.LatencyInfo(subscriptionMessage);
            }

            return(subscriptionMessage);
        }
Esempio n. 2
0
        /// <summary>
        /// The body.
        /// </summary>
        /// <param name="id">The activity id.</param>
        protected override void ExecuteInternal(Guid id)
        {
            bool isSearchSubscription = this.Manager.Settings.SubscriptionType == EventHubSubscriptionType.SearchSubscription;

            if (this.Manager.SubscriptionClient != null)
            {
                lock (JobLock)
                {
                    try
                    {
                        ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Subscription = '{0}' Topic = '{1}'", this.Manager.Subscription.Name, this.Manager.Subscription.TopicPath));

                        // take N at a time
                        var messages = this.Manager.SubscriptionClient
                                       .ReceiveBatch(this.Manager.Settings.ReceiveBatchMessageCount, this.Manager.Settings.ReceiveBatchServerWaitTime)
                                       .Where(message => message != null);

                        foreach (var message in messages)
                        {
                            message.Complete();

                            var crmSubscriptionMessage = CrmSubscriptionMessageFactory.Create(message);

                            if (crmSubscriptionMessage != null)
                            {
                                NotificationUpdateManager.Instance.UpdateNotificationMessageTable(crmSubscriptionMessage, isSearchSubscription);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        this.Manager.Reset();
                        ADXTrace.Instance.TraceInfo(TraceCategory.Application, e.ToString());
                    }
                }
            }
        }