Exemple #1
0
        private static Uri GetEndpointAddress(string endpointName, HostBindingType bindingType, int tcpPort, int httpPort, string serviceAddressBase)
        {
            var serviceBase   = string.IsNullOrEmpty(serviceAddressBase) ? endpointName : serviceAddressBase;
            var serviceAdress = string.Format("{0}/{1}", serviceBase, endpointName);

            if (bindingType == HostBindingType.NetTcp)
            {
                return(new UriBuilder(String.Format("net.tcp://localhost:{0}/{1}", tcpPort, serviceAdress)).Uri);
            }
            if (bindingType == HostBindingType.NamedPipes)
            {
                return(new UriBuilder(String.Format("net.pipe://localhost/{0}", serviceAdress)).Uri);
            }

            return(new UriBuilder(String.Format("http://localhost:{0}/{1}", httpPort, serviceAdress)).Uri);
        }
Exemple #2
0
        private static ServiceEndpointDescription StartHost <TServiceType, TServiceInterfaceType>
        (
            string name,
            string description,
            HostBindingType bindingType,
            int httpPort,
            int tcpPort,
            string serviceAddressBase)
        {
            var sed = new ServiceEndpointDescription(name, description);

            sed.Binding     = GetBinding <TServiceInterfaceType>(bindingType);
            sed.ServiceHost = new ServiceHost(typeof(TServiceType));
            var endpointAddress = GetEndpointAddress(name, bindingType, tcpPort, httpPort, serviceAddressBase);

            var metadataBehavior = sed.ServiceHost.Description.Behaviors.Find <ServiceMetadataBehavior>();

            if (null == metadataBehavior)
            {
                if (bindingType == HostBindingType.BasicHttp ||
                    bindingType == HostBindingType.WSHttp ||
                    bindingType == HostBindingType.WSDualHttp)
                {
                    metadataBehavior = new ServiceMetadataBehavior();
                    metadataBehavior.HttpGetEnabled = true;
                    metadataBehavior.HttpGetUrl     = endpointAddress;
                    sed.ServiceHost.Description.Behaviors.Add(metadataBehavior);
                }
            }

            var debugBehavior = sed.ServiceHost.Description.Behaviors.Find <ServiceDebugBehavior>();

            if (null == debugBehavior)
            {
                debugBehavior = new ServiceDebugBehavior
                {
                    IncludeExceptionDetailInFaults = true
                };

                sed.ServiceHost.Description.Behaviors.Add(debugBehavior);
            }

            sed.ServiceHost.AddServiceEndpoint(typeof(TServiceInterfaceType), sed.Binding, endpointAddress);
            sed.ServiceHost.Open();

            return(sed);
        }
Exemple #3
0
        private static Binding GetBinding <TServiceInterfaceType>(HostBindingType bindingType)
        {
            var contractObjects = typeof(TServiceInterfaceType).GetCustomAttributes(typeof(ServiceContractAttribute),
                                                                                    false);
            string serviceConfigurationName = null;

            if (contractObjects.Length > 0)
            {
                serviceConfigurationName = ((ServiceContractAttribute)contractObjects[0]).ConfigurationName;
            }

            if (string.IsNullOrEmpty(serviceConfigurationName))
            {
                serviceConfigurationName = typeof(TServiceInterfaceType).Name;
            }

            Binding binding;

            if (bindingType == HostBindingType.NetTcp)
            {
                var configurationName = string.Format("{0}_{1}", typeof(NetTcpBinding).Name, serviceConfigurationName);
                try
                {
                    binding = new NetTcpBinding(configurationName);
                }
                catch
                {
                    Platform.Log(LogLevel.Info,
                                 string.Format("unable to load binding configuration {0}; using default binding configuration",
                                               configurationName));
                    binding = new NetTcpBinding();
                }

                ((NetTcpBinding)binding).PortSharingEnabled = true;
            }
            else if (bindingType == HostBindingType.NamedPipes)
            {
                var configurationName = string.Format("{0}_{1}", typeof(NetNamedPipeBinding).Name,
                                                      serviceConfigurationName);
                try
                {
                    binding = new NetNamedPipeBinding(configurationName);
                }
                catch
                {
                    Platform.Log(LogLevel.Info,
                                 "unable to load binding configuration {0}; using default binding configuration",
                                 configurationName);
                    binding = new NetNamedPipeBinding();
                }
            }
            else if (bindingType == HostBindingType.WSDualHttp)
            {
                var configurationName = string.Format("{0}_{1}", typeof(WSDualHttpBinding).Name,
                                                      serviceConfigurationName);
                try
                {
                    binding = new WSDualHttpBinding(configurationName);
                }
                catch
                {
                    Platform.Log(LogLevel.Info,
                                 "unable to load binding configuration {0}; using default binding configuration",
                                 configurationName);
                    binding = new WSDualHttpBinding();
                }
            }
            else if (bindingType == HostBindingType.WSHttp)
            {
                var configurationName = string.Format("{0}_{1}", typeof(WSHttpBinding).Name, serviceConfigurationName);
                try
                {
                    binding = new WSHttpBinding(configurationName);
                }
                catch
                {
                    Platform.Log(LogLevel.Info,
                                 "unable to load binding configuration {0}; using default binding configuration",
                                 configurationName);
                    binding = new WSHttpBinding();
                }
            }
            else
            {
                var configurationName = string.Format("{0}_{1}", typeof(BasicHttpBinding).Name, serviceConfigurationName);
                try
                {
                    binding = new BasicHttpBinding(configurationName);
                }
                catch
                {
                    Platform.Log(LogLevel.Info,
                                 "unable to load binding configuration {0}; using default binding configuration",
                                 configurationName);
                    binding = new BasicHttpBinding();
                }
            }

            return(binding);
        }