internal ServiceInstance(ServiceConfiguration configuration, ServiceEnvironment environment, ServiceInstance parentInstance) { if (configuration == null) { throw new ArgumentNullException("configuration"); } if (configuration.ConfigurationLevel == ServiceConfigurationLevel.Instance) { throw new ArgumentException("Cannot use an existing instance-level configuration to create a new instance. Use instance.Configuration.GetBaseConfiguration(..) instead.", "configuration"); } ThrowExceptionOnError = false; this.Environment = environment; this.InstanceID = Guid.NewGuid(); if (parentInstance != null) { this.Configuration = configuration.Derive(ServiceConfigurationLevel.Instance, parentInstance.Configuration); this.ParentInstance = parentInstance; } else { this.Configuration = configuration.Derive(ServiceConfigurationLevel.Instance, null); } if (String.IsNullOrEmpty(this.Configuration.HostName)) { this.Configuration.HostName = Environment.EnvironmentConfiguration.DefaultHostName; } //((ILockable)this.Configuration).Lock(); }
internal ServiceConnection(ServiceEnvironment environment, Guid serviceInstanceID, string endpointName, string endpointAddress) { this.Guid = Guid.NewGuid(); this.ServiceInstanceID = serviceInstanceID; this.HostChannel = new WcfDuplexClient <IServiceExecutionHost>(environment, this, endpointName, endpointAddress); //TODO: add environment to StreamingContext this.HostChannel.Open(); this.HostChannel.Channel.Connect(this.ServiceInstanceID, this.Guid); }
internal ServiceConnection(ServiceEnvironment environment, Guid serviceInstanceID, string endpointName, string endpointAddress) { Guid = Guid.NewGuid(); ServiceInstanceID = serviceInstanceID; EnvironmentUsageName = environment.UsageName; HostChannel = new WcfDuplexClient <IServiceExecutionHost>(environment, this, endpointName, endpointAddress); //TODO: add environment to StreamingContext HostChannel.Open(); HostChannel.Channel.Connect(ServiceInstanceID, Guid, EnvironmentUsageName); }
// ======================== #endregion #region Methods // ======================== public ServiceExecutionHost(string name, ServiceEnvironment environment) { ServiceExecutionPermission.All.Demand(); this.HostName = name; this.HostGuid = Guid.NewGuid(); this.Environment = environment; this.WcfHost = new WcfHost(this.Environment, this); ServiceEndpoint[] rawEndpoints = this.WcfHost.Description.Endpoints.ToArray(); this.WcfHost.Description.Endpoints.Clear(); foreach (ServiceEndpoint endpoint in rawEndpoints) { endpoint.Address = new EndpointAddress(new Uri(endpoint.Address.Uri.ToString().Replace("{hostName}", name))); this.WcfHost.AddServiceEndpoint(endpoint); } this.Environment.RegisterHost(this); // Open the listener WcfHost.Open(); // Start the logger Edge.Core.Utilities.Log.Start(); #region Code Access Security (disabled) /* * * // Move following line outside this function * // PermissionSet _servicePermissions; * * _servicePermissions = new PermissionSet(PermissionState.None); * _servicePermissions.AddPermission(new ServiceExecutionPermission(ServiceExecutionPermissionFlags.None)); * _servicePermissions.AddPermission(new System.Security.Permissions.FileIOPermission(PermissionState.Unrestricted)); * _servicePermissions.AddPermission(new System.Security.Permissions.ReflectionPermission(PermissionState.Unrestricted)); * _servicePermissions.AddPermission(new System.Security.Permissions.SecurityPermission( * SecurityPermissionFlag.Assertion | * SecurityPermissionFlag.Execution | * SecurityPermissionFlag.ControlAppDomain | * SecurityPermissionFlag.ControlThread | * SecurityPermissionFlag.SerializationFormatter * )); */ #endregion }
public WcfDuplexClient(ServiceEnvironment environment, ServiceConnection connection, string endpointName, string endpointAddress) : base(new InstanceContext(connection), endpointName, endpointAddress) { foreach (OperationDescription description in this.Endpoint.Contract.Operations) { DataContractSerializerOperationBehavior dcsOperationBehavior = description.Behaviors.Find <DataContractSerializerOperationBehavior>(); if (dcsOperationBehavior != null) { description.Behaviors.Remove(dcsOperationBehavior); description.Behaviors.Add(new NetDataContractOperationBehavior(description) { StreamingContextObject = environment }); } } }
// ------------------------------ internal ServiceEnvironmentEventListener(ServiceEnvironment environment, ServiceEnvironmentEventType[] eventTypes) { this.ListenerID = Guid.NewGuid(); this.Environment = environment; this.EventTypes = eventTypes; this.WcfHost = new WcfHost(environment, this); ServiceEndpoint[] rawEndpoints = WcfHost.Description.Endpoints.ToArray(); WcfHost.Description.Endpoints.Clear(); foreach (ServiceEndpoint endpoint in rawEndpoints) { endpoint.Address = new EndpointAddress(new Uri(endpoint.Address.Uri.ToString().Replace("{guid}", this.ListenerID.ToString("N")))); WcfHost.AddServiceEndpoint(endpoint); } WcfHost.Open(); }
internal static ServiceInstance FromSqlData(IDataRecord record, ServiceEnvironment environment, ServiceInstance childInstance, bool stateInfoOnly) { ServiceInstance instance = new ServiceInstance() { InstanceID = record.Convert <string, Guid>("InstanceID", raw => Guid.Parse(raw)), Environment = environment, StateInfo = new ServiceStateInfo() { Progress = record.Get <double>("Progress"), State = record.Get <ServiceState>("State"), Outcome = record.Get <ServiceOutcome>("Outcome"), TimeInitialized = record.Get <DateTime>("TimeInitialized"), TimeStarted = record.Get <DateTime>("TimeStarted"), TimeEnded = record.Get <DateTime>("TimeEnded"), TimeLastPaused = record.Get <DateTime>("TimeLastPaused"), TimeLastResumed = record.Get <DateTime>("TimeLastResumed") } }; if (!stateInfoOnly) { instance.SchedulingInfo = record.IsDBNull("Scheduling_Status", "Scheduling_Scope", "Scheduling_MaxDeviationBefore", "Scheduling_MaxDeviationAfter", "Scheduling_RequestedTime", "Scheduling_ExpectedStartTime", "Scheduling_ExpectedEndTime") ? null : new SchedulingInfo() { SchedulingStatus = record.Get <SchedulingStatus>("Scheduling_Status"), SchedulingScope = record.Get <SchedulingScope>("Scheduling_Scope"), MaxDeviationBefore = new TimeSpan(0, 0, (int)record.Get <long>("Scheduling_MaxDeviationBefore")), MaxDeviationAfter = new TimeSpan(0, 0, (int)record.Get <long>("Scheduling_MaxDeviationAfter")), RequestedTime = record.Get <DateTime>("Scheduling_RequestedTime"), ExpectedStartTime = record.Get <DateTime>("Scheduling_ExpectedStartTime"), ExpectedEndTime = record.Get <DateTime>("Scheduling_ExpectedEndTime"), }; var stringReader = new StringReader(record.Get <String>("Configuration")); using (var xmlReader = new XmlTextReader(stringReader)) instance.Configuration = (ServiceConfiguration) new NetDataContractSerializer().ReadObject(xmlReader); } if (childInstance != null) { childInstance.ParentInstance = instance; } return(instance); }
public WcfHost(ServiceEnvironment environment, object singletonInstance) : base(singletonInstance) { _environment = environment; foreach (ServiceEndpoint endpoint in this.Description.Endpoints) { foreach (OperationDescription description in endpoint.Contract.Operations) { DataContractSerializerOperationBehavior dcsOperationBehavior = description.Behaviors.Find <DataContractSerializerOperationBehavior>(); if (dcsOperationBehavior != null) { description.Behaviors.Remove(dcsOperationBehavior); description.Behaviors.Add(new NetDataContractOperationBehavior(description) { StreamingContextObject = _environment }); } } } }
internal void Init(ServiceExecutionHost host, ServiceEnvironmentConfiguration envConfig, ServiceConfiguration config, SchedulingInfo schedulingInfo, Guid instanceID, Guid parentInstanceID) { Host = host; this.Environment = ServiceEnvironment.Open("Service", envConfig); this.InstanceID = instanceID; this.Configuration = config; this.SchedulingInfo = schedulingInfo; if (parentInstanceID != Guid.Empty) { this.ParentInstance = Environment.GetServiceInstance(parentInstanceID); } Current = this; // Monitor app domain-level events AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(this.DomainUnhandledException); AppDomain.CurrentDomain.DomainUnload += new EventHandler(this.DomainUnload); StateInfo.TimeInitialized = DateTime.Now; StateInfo.State = ServiceState.Ready; NotifyState(); }