| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- //-----------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace System.ServiceModel.Configuration
- {
- using System;
- using System.Configuration;
- using System.Diagnostics;
- using System.IO;
- using System.ServiceModel.Diagnostics.Application;
- using System.Text;
- public sealed partial class ServiceActivationElement : ConfigurationElement
- {
- const string PathSeparatorString = "/";
- const string ReversSlashString = @"\";
- class RelativeAddressValidator : ConfigurationValidatorBase
- {
- public override bool CanValidate(Type type)
- {
- return type == typeof(string);
- }
- // we support relativeAddress with formats as fileName.extension and ~/fileName.extension
- public override void Validate(object value)
- {
- string relativeAddress = value as string;
- // the size of relativeAddress cannot be smaller than 3 as it must have extension
- if (string.IsNullOrEmpty(relativeAddress) || string.IsNullOrEmpty(relativeAddress.Trim()) || relativeAddress.Length < 3)
- {
- throw FxTrace.Exception.AsError(new ArgumentException(SR.GetString(SR.Hosting_RelativeAddressFormatError, relativeAddress)));
- }
- //user gives an absolute address, throw, as we do not support absolute address
- if (relativeAddress.StartsWith(PathSeparatorString, StringComparison.CurrentCultureIgnoreCase)
- || relativeAddress.StartsWith(ReversSlashString, StringComparison.CurrentCultureIgnoreCase))
- {
- throw FxTrace.Exception.AsError(new ArgumentException(SR.GetString(SR.Hosting_NoAbsoluteRelativeAddress, relativeAddress)));
- }
- }
- }
- [AttributeUsage(AttributeTargets.Property)]
- sealed class RelativeAddressValidatorAttribute : ConfigurationValidatorAttribute
- {
- public override ConfigurationValidatorBase ValidatorInstance
- {
- get
- {
- return new RelativeAddressValidator();
- }
- }
- }
- public ServiceActivationElement()
- {
- }
- public ServiceActivationElement(string relativeAddress)
- : this()
- {
- if (relativeAddress == null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(ConfigurationStrings.RelativeAddress);
- }
- this.RelativeAddress = relativeAddress;
- }
- public ServiceActivationElement(string relativeAddress, string service)
- : this(relativeAddress)
- {
- this.Service = service;
- }
- public ServiceActivationElement(string relativeAddress, string service, string factory)
- : this(relativeAddress, service)
- {
- this.Factory = factory;
- }
- [ConfigurationProperty(ConfigurationStrings.RelativeAddress, Options = ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey)]
- [RelativeAddressValidator()]
- public string RelativeAddress
- {
- get { return (string)base[ConfigurationStrings.RelativeAddress]; }
- set
- {
- base[ConfigurationStrings.RelativeAddress] = value;
- }
- }
- [ConfigurationProperty(ConfigurationStrings.Service, Options = ConfigurationPropertyOptions.None)]
- [StringValidator(MinLength = 0)]
- public string Service
- {
- get { return (string)base[ConfigurationStrings.Service]; }
- set
- {
- if (string.IsNullOrEmpty(value))
- {
- value = string.Empty;
- }
- base[ConfigurationStrings.Service] = value;
- }
- }
- [ConfigurationProperty(ConfigurationStrings.Factory, Options = ConfigurationPropertyOptions.None)]
- [StringValidator(MinLength = 0)]
- public string Factory
- {
- get { return (string)base[ConfigurationStrings.Factory]; }
- set
- {
- if (string.IsNullOrEmpty(value))
- {
- value = string.Empty;
- }
- base[ConfigurationStrings.Factory] = value;
- }
- }
- }
- }
|