예제 #1
0
        internal static WcfChannelWrapper <T> CreateServiceClient <T>() where T : class
        {
            string         typeName = typeof(T).FullName;
            ChannelFactory cf;

            if (!channelFactoryCache.TryGetValue(typeName, out cf))
            {
                lock (cacheLocker)
                {
                    if (!channelFactoryCache.TryGetValue(typeName, out cf))
                    {
                        if (typeof(T) == typeof(IWcfConfigService))
                        {
                            var configServiceAddress = ConfigurationManager.AppSettings[WCFCONFIGSERVICE_ADDRESS_KEY];
                            if (string.IsNullOrEmpty(configServiceAddress))
                            {
                                throw new Exception("Please set [" + WCFCONFIGSERVICE_ADDRESS_KEY + "] appSettings in your config!");
                            }
                            var binding = new NetTcpBinding();
                            binding.Security.Mode = SecurityMode.None;
                            var address = string.Format("net.tcp://{0}", configServiceAddress);
                            cf = new ChannelFactory <IWcfConfigService>(binding, address);
                        }
                        else if (typeof(T) == typeof(IWcfLogService))
                        {
                            var logServiceAddress = ConfigurationManager.AppSettings[WCFLOGSERVICE_ADDRESS_KEY];
                            if (string.IsNullOrEmpty(logServiceAddress))
                            {
                                throw new Exception("Please set [" + WCFLOGSERVICE_ADDRESS_KEY + "] appSettings in your config!");
                            }
                            var elements = new List <BindingElement>();
                            elements.Add(new BinaryMessageEncodingBindingElement());
                            elements.Add(new TcpTransportBindingElement());
                            var binding = new CustomBinding(elements);
                            var address = string.Format("net.tcp://{0}", logServiceAddress);
                            cf = new ChannelFactory <IWcfLogService>(binding, address);
                        }
                        else
                        {
                            var endpoint = GetWcfClientEndpointConfiguration(typeof(T));
                            cf = CreateChannelFactory <T>(endpoint);

                            WcfSettingManager.Init <T>();
                            ConfigUpdateManager.InitClient();

                            if (WcfSettingManager.CurrentClientSetting <T>().WcfLogSetting.StartInfoSetting.Enabled)
                            {
                                var log = WcfLogProvider.GetClientStartInfo(typeof(T).FullName, "WcfServiceClientFactory.CreateServiceClient", endpoint);
                                WcfServiceLocator.GetLogService().LogWithoutException(log);
                            }
                        }

                        channelFactoryCache[typeName] = cf;
                    }
                }
            }

            return(new WcfChannelWrapper <T>((cf as ChannelFactory <T>).CreateChannel()));
        }
예제 #2
0
 public static void StartService(Type serviceType)
 {
     try
     {
         host = WcfServiceHostFactory.CreateServiceHost(serviceType);
         host.Open();
         ConfigUpdateManager.InitServer();
     }
     catch (Exception ex)
     {
         LocalLogService.Log(ex.ToString());
         throw;
     }
 }