Esempio n. 1
0
        /// <summary>
        /// Get a delegate capable of creating channels.
        /// </summary>
        /// <param name="clientModel">The client model.</param>
        /// <param name="contract">The contract override.</param>
        /// <param name="burden">Receives the client burden.</param>
        /// <returns>The <see cref="ChannelCreator"/></returns>
        public ChannelCreator GetChannelCreator(M clientModel, Type contract, out IWcfBurden burden)
        {
            burden = new WcfBurden(Kernel);
            var scope = new Scope(contract, clientModel, this, burden);

            return(scope.BuildChannelCreator());
        }
        protected void ConfigureServiceHost(ServiceHost serviceHost, IWcfServiceModel serviceModel, ComponentModel model)
        {
            serviceHost.Description.Behaviors.Add(
                new WindsorDependencyInjectionServiceBehavior(kernel, model)
                );

            var burden    = new WcfBurden(kernel);
            var contracts = new HashSet <ContractDescription>();
            Dictionary <IWcfEndpoint, ServiceEndpoint> endpoints = null;

            if (serviceModel != null && serviceModel.Endpoints.Count > 0)
            {
                endpoints = new Dictionary <IWcfEndpoint, ServiceEndpoint>();
                var builder = new ServiceEndpointBuilder(this, serviceHost);

                foreach (var endpoint in serviceModel.Endpoints)
                {
                    endpoints.Add(endpoint, builder.AddServiceEndpoint(endpoint));
                }
            }

            var extensions = new ServiceHostExtensions(serviceHost, kernel)
                             .Install(burden, new WcfServiceExtensions());

            if (serviceModel != null)
            {
                extensions.Install(serviceModel.Extensions, burden);
            }

            extensions.Install(burden, new WcfEndpointExtensions(WcfExtensionScope.Services));

            if (endpoints != null)
            {
                foreach (var endpoint in endpoints)
                {
                    var addContract = contracts.Add(endpoint.Value.Contract);
                    new ServiceEndpointExtensions(endpoint.Value, addContract, kernel)
                    .Install(endpoint.Key.Extensions, burden);
                }
            }

            if (serviceHost is IWcfServiceHost)
            {
                var wcfServiceHost = (IWcfServiceHost)serviceHost;

                wcfServiceHost.EndpointCreated += (_, e) =>
                {
                    var addContract        = contracts.Add(e.Endpoint.Contract);
                    var endpointExtensions = new ServiceEndpointExtensions(e.Endpoint, addContract, kernel)
                                             .Install(burden, new WcfEndpointExtensions(WcfExtensionScope.Services));

                    if (serviceModel != null)
                    {
                        endpointExtensions.Install(serviceModel.Extensions, burden);
                    }
                };
            }

            serviceHost.Extensions.Add(new WcfBurdenExtension <ServiceHostBase>(burden));
        }