private static void ConfigureReaderQuotas(ProxyConfiguration configuration, XmlDictionaryReaderQuotas readerQuotas)
 {
     readerQuotas.MaxArrayLength = configuration.MaxArrayLength;
     readerQuotas.MaxBytesPerRead = configuration.MaxBytesPerRead;
     readerQuotas.MaxDepth = configuration.MaxDepth;
     readerQuotas.MaxNameTableCharCount = configuration.MaxNameTableCharCount;
     readerQuotas.MaxStringContentLength = configuration.MaxStringContentLength;
 }
        public Binding CreateBinding(ProxyConfiguration configuration)
        {
            var binding = (Binding)Activator.CreateInstance(configuration.BindingType);
            if (binding is WSHttpBinding)
            {
                var b = ((WSHttpBinding)binding);

                b.Security.Mode = SecurityMode.None;
                b.MaxReceivedMessageSize = configuration.MaxReceivedMessageSize;
                b.MessageEncoding = configuration.MessageEncoding;

                ConfigureReaderQuotas(configuration, b.ReaderQuotas);
            }
            else if (binding is NetTcpBinding)
            {
                var b = ((NetTcpBinding)binding);

                b.Security.Mode = SecurityMode.None;
                b.MaxReceivedMessageSize = configuration.MaxReceivedMessageSize;

                ConfigureReaderQuotas(configuration, b.ReaderQuotas);
            }
            else if (binding is BasicHttpBinding)
            {
                var b = ((BasicHttpBinding)binding);
                b.Security.Mode = BasicHttpSecurityMode.None;
                b.MaxReceivedMessageSize = configuration.MaxReceivedMessageSize;
                b.MessageEncoding = configuration.MessageEncoding;

                ConfigureReaderQuotas(configuration, b.ReaderQuotas);
            }
            else if (binding is WebHttpBinding)
            {
                var b = ((WebHttpBinding)binding);

                b.Security.Mode = WebHttpSecurityMode.None;
                b.MaxReceivedMessageSize = configuration.MaxReceivedMessageSize;

                ConfigureReaderQuotas(configuration, b.ReaderQuotas);
            }

            binding.ReceiveTimeout = configuration.ReceiveTimeout;
            binding.SendTimeout = configuration.SendTimeout;
            binding.OpenTimeout = configuration.OpenTimeout;

            return binding;
        }
        private static VirtualFile GetVirtualFile(string virtualPath)
        {
            WcfVirtualFile vf;

            if (WcfVirtualFileCache.TryGetValue(virtualPath, out vf))
            {
                return vf;
            }

            lock (Lock)
            {
                if (!WcfVirtualFileCache.ContainsKey(virtualPath))
                {
                    var serviceName = Path.GetFileNameWithoutExtension(virtualPath);
                    var pc = new ProxyConfiguration(new Config(), serviceName);
                    vf = new WcfVirtualFile(virtualPath, pc.ServiceTypeName, typeof(VirtualWcfFactory).FullName);

                    WcfVirtualFileCache.Add(virtualPath, vf);

                    return vf;
                }
                return WcfVirtualFileCache[virtualPath];
            }
        }
        public static ProxyConfiguration Create(IConfig config, string serviceName, string instance = null)
        {
            var proxyConfig = new ProxyConfiguration(config, serviceName, instance);

            return proxyConfig.Address == null ? null : proxyConfig;
        }