Ejemplo n.º 1
0
        public static void ValidateDescriptionName(this RuleDescription description)
        {
            if (string.IsNullOrWhiteSpace(description.Name))
            {
                throw Fx.Exception.ArgumentNullOrWhiteSpace(nameof(description.Name));
            }

            if (description.Name.Length > Constants.RuleNameMaximumLength)
            {
                throw Fx.Exception.ArgumentOutOfRange(
                          nameof(description.Name),
                          description.Name,
                          Resources.EntityNameLengthExceedsLimit.FormatForUser(description.Name, Constants.RuleNameMaximumLength));
            }

            if (description.Name.Contains(Constants.PathDelimiter) || description.Name.Contains(@"\"))
            {
                throw Fx.Exception.Argument(
                          nameof(description.Name),
                          Resources.InvalidCharacterInEntityName.FormatForUser(Constants.PathDelimiter, description.Name));
            }

            string[] uriSchemeKeys = { "@", "?", "#" };
            foreach (var uriSchemeKey in uriSchemeKeys)
            {
                if (description.Name.Contains(uriSchemeKey))
                {
                    throw Fx.Exception.Argument(
                              nameof(description.Name),
                              Resources.CharacterReservedForUriScheme.FormatForUser(nameof(description.Name), uriSchemeKey));
                }
            }
        }
Ejemplo n.º 2
0
 public static XElement SerializeRule(this RuleDescription description, string elementName = "RuleDescription")
 {
     return(new XElement(
                XName.Get(elementName, ManagementClientConstants.ServiceBusNamespace),
                description.Filter?.Serialize(),
                description.Action?.Serialize(),
                new XElement(XName.Get("Name", ManagementClientConstants.ServiceBusNamespace), description.Name)));
 }
Ejemplo n.º 3
0
        public static XDocument Serialize(this RuleDescription description)
        {
            XDocument doc = new XDocument(
                new XElement(XName.Get("entry", ManagementClientConstants.AtomNamespace),
                             new XElement(XName.Get("content", ManagementClientConstants.AtomNamespace),
                                          new XAttribute("type", "application/xml"),
                                          description.SerializeRule())));

            return(doc);
        }
 internal Activity AddRuleStart(RuleDescription description)
 {
     return(Start("AddRule", () => new
     {
         Rule = description,
         Entity = this.entityPath,
         Endpoint = this.endpoint
     },
                  null));
 }
 internal void AddRuleStop(Activity activity, RuleDescription description, TaskStatus?status)
 {
     if (activity != null)
     {
         DiagnosticListener.StopActivity(activity, new
         {
             Rule     = description,
             Entity   = this.entityPath,
             Endpoint = this.endpoint,
             Status   = status ?? TaskStatus.Faulted
         });
     }
 }
        /// <summary>
        /// Asynchronously adds a new rule to the subscription using the specified rule description.
        /// </summary>
        /// <param name="description">The rule description that provides metadata of the rule to add.</param>
        /// <returns>A task instance that represents the asynchronous add rule operation.</returns>
        public async Task AddRuleAsync(RuleDescription description)
        {
            if (description == null)
            {
                throw Fx.Exception.ArgumentNull(nameof(description));
            }

            description.ValidateDescriptionName();
            MessagingEventSource.Log.AddRuleStart(this.ClientId, description.Name);

            try
            {
                await this.InnerSubscriptionClient.OnAddRuleAsync(description).ConfigureAwait(false);
            }
            catch (Exception exception)
            {
                MessagingEventSource.Log.AddRuleException(this.ClientId, exception);
                throw;
            }

            MessagingEventSource.Log.AddRuleStop(this.ClientId);
        }
Ejemplo n.º 7
0
        private static RuleDescription ParseFromEntryElement(XElement xEntry)
        {
            var name            = xEntry.Element(XName.Get("title", ManagementClientConstants.AtomNamespace)).Value;
            var ruleDescription = new RuleDescription();

            var rdXml = xEntry.Element(XName.Get("content", ManagementClientConstants.AtomNamespace))?
                        .Element(XName.Get("RuleDescription", ManagementClientConstants.ServiceBusNamespace));

            if (rdXml == null)
            {
                throw new MessagingEntityNotFoundException("Rule was not found");
            }

            foreach (var element in rdXml.Elements())
            {
                switch (element.Name.LocalName)
                {
                case "Name":
                    ruleDescription.Name = element.Value;
                    break;

                case "Filter":
                    ruleDescription.Filter = FilterExtensions.ParseFromXElement(element);
                    break;

                case "Action":
                    ruleDescription.Action = RuleActionExtensions.ParseFromXElement(element);
                    break;

                case "CreatedAt":
                    ruleDescription.CreatedAt = DateTime.Parse(element.Value);
                    break;
                }
            }

            return(ruleDescription);
        }
Ejemplo n.º 8
0
 protected abstract Task OnAddRuleAsync(RuleDescription description);
Ejemplo n.º 9
0
 internal void AddRuleStop(Activity activity, RuleDescription description, TaskStatus?status)
 {
     if (activity != null)
     {
     }
 }