public RemoteProvider(WebHttpClient<IQueryService> client)
		{
			this.client = client;
			this.visitor = new StripQuoteVisitor();
			this.resolver = new TypeResolver(assemblies: null, knownTypes: client.knownTypes ?? new Type[0]);
			CustomExpressionXmlConverter queryconverter = new QueryExpressionXmlConverter(creator: null, resolver: resolver);
			CustomExpressionXmlConverter knowntypeconverter = new KnownTypeExpressionXmlConverter(resolver);			
			this.serializer = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { queryconverter, knowntypeconverter });
		}
        public RemoteProvider(WebHttpClient <IQueryService> client)
        {
            this.client = client;
            visitor     = new StripQuoteVisitor();
            resolver    = new TypeResolver(null, client.knownTypes ?? new Type[0]);
            CustomExpressionXmlConverter queryconverter     = new QueryExpressionXmlConverter(null, resolver);
            CustomExpressionXmlConverter knowntypeconverter = new KnownTypeExpressionXmlConverter(resolver);

            serializer = new ExpressionSerializer(resolver, new[] { queryconverter, knowntypeconverter });
        }
		static ExpressionSerializer CreateSerializer()
		{
			var assemblies = new Assembly[] { typeof(Customer).Assembly, typeof(ExpressionType).Assembly, typeof(IQueryable).Assembly };
			var resolver = new TypeResolver(assemblies, new Type[] 
			{ 
				typeof(Customer), typeof(Order), typeof(Product), 
				typeof(Supplier), typeof(Shipper) 
			});
			//var creator = new QueryCreator();
			CustomExpressionXmlConverter queryconverter = new QueryExpressionXmlConverter(creator: null, resolver: resolver);
			CustomExpressionXmlConverter knowntypeconverter = new KnownTypeExpressionXmlConverter(resolver);
			ExpressionSerializer serializer = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { queryconverter, knowntypeconverter });
			return serializer;
			//ExpressionSerializer serializer = new ExpressionSerializer()
		}
		public NorthwindService()
		{
			var connectionStrings = System.Configuration.ConfigurationManager.ConnectionStrings;
			this.connectionString = connectionStrings["northwind"].ConnectionString;
			this.creator = new QueryCreator(this.FnGetDatabaseObjects);
			this.assemblies = new Assembly[] { typeof(Customer).Assembly, typeof(ExpressionType).Assembly, typeof(IQueryable).Assembly };
			this.resolver = new TypeResolver(assemblies, new Type[] 
			{ 
				typeof(Customer), typeof(Order), typeof(Product), 
				typeof(Supplier), typeof(Shipper) 
			});			
			CustomExpressionXmlConverter queryconverter = new QueryExpressionXmlConverter(creator, this.resolver);
			CustomExpressionXmlConverter knowntypeconverter = new KnownTypeExpressionXmlConverter(this.resolver);
			this.serializer = new ExpressionSerializer(resolver, new CustomExpressionXmlConverter[] { queryconverter, knowntypeconverter });			
		}
		public void QueryExpressionXmlConverterTest()
		{
			Type elementType = typeof(Customer);
			var creator = new QueryCreator(this.FnGetObjects);
			var converter = new QueryExpressionXmlConverter(creator, this.resolver);
			bool success;
			XElement x;
			Expression e;
			MethodCallExpression m;
			ConstantExpression cx;
			IQueryProvider provider;

			//the client Query. IQueryProvider has not real data.
			Query<Customer> query = new Query<Customer>(default(IQueryProvider));
			provider = ((IQueryable)query).Provider;
			IQueryable<Customer> queryable;			
			queryable = from c in query
						where c.ID == null //initialized with properties == null
						select c;

			//serialize to XML
			e = Expression.Constant(queryable);
			success = converter.TrySerialize(e, out x);

			//deserialize to ConstantExpression(Query)			
			success = converter.TryDeserialize(x, out e);
			cx = (ConstantExpression)e;
			Query<Customer> serverquery = (Query<Customer>)cx.Value;
			//upon deserialization, should have a new IQueryProvider
			Assert.AreNotEqual(provider, ((IQueryable)serverquery).Provider);
			provider = ((IQueryable)serverquery).Provider;
			
			//Execute Query on server side.
			int count = serverquery.Count();

		}