public static void aaMain(string[] args)
        {
            string token = GetTokenFromACS(realm);

            while (true)
            {

                var client = new WebClient();
                //string headerValue = string.Format("WRAP access_token=\"{0}\"", token);
                //client.Headers.Add("Authorization", headerValue);
                var path = Console.ReadLine();

                client.Headers.Add("Authorization",
                                   "CAACEdEose0cBAPleI2Ra9veUovuzYFWcneCjdJsP6YZC82fepr7xwwdqEGHcQbJ80AL89XTqPmaKYQTpfpBaZCbZBoGdOx4oiZCiNDubkRorA0ItntHkoQ8fjBIp5ZBysCAeJJOyIcfFEAS9vRZAbBsbctJDm3XVQ8l0TtiFeO7IZBZBAfHHy0BiPPB1hNvIHodrWd082KqxywZDZD");
                client.Headers.Add("FacebookId", "501790562");

                //var stream = client.OpenRead(@"http://*****:*****@"http://f34e2b0b303842659d3e58ed6dc844a5.cloudapp.net:8080/RESTfulWCFUsersServiceEndPoint.svc/" + path);

                var user = new User
                    {
                        FacebookId = "501790562",
                        FirstName = "Benson",
                        LastName = "Chiu",
                        Email = "*****@*****.**",
                        CreditBalance = 100,
                        //CoffeeIconId = 1,
                        Sex = "Male",
                        Phone = "97366637",
                        Birthday = null,
                        CreatedDateTime = DateTime.MaxValue,
                        LastUpdatedDateTime = DateTime.MaxValue,
                    };

                var stream1 = new MemoryStream();
                var ser = new DataContractJsonSerializer(typeof(User));
                ser.WriteObject(stream1, user);
                stream1.Position = 0;
                var sr = new StreamReader(stream1);
                var json = sr.ReadToEnd();
                client.Headers.Add("Content-Type", "application/json");
                var stream = client.UploadString(@"http://localhost:8080/RESTfulWCFUsersServiceEndPoint.svc/" + path, json);

                var reader = new StreamReader(stream);
                var response = reader.ReadToEnd();
                Console.WriteLine(response);
                Console.WriteLine();
            }
        }
        public static void Main(string[] args)
        {
            while (true)
            {

                var client = new WebClient();
                //string headerValue = string.Format("WRAP access_token=\"{0}\"", token);
                //client.Headers.Add("Authorization", headerValue);
                var path = Console.ReadLine();

                client.Headers.Add("Authorization",
                                   "CAACEdEose0cBAP7ey9NuASlGmvbeofoiyAc2pbsbB8Go5ekdJNNZADK8ENoYmC9vTDdw3ZA60ls2mcIcwdJeANSzY1ZCph2AhnhTgo2L2C2ZClZCpxMfoyD0ZBLNRJZBMJ9MT1EGJzaYyrs2SaQdtKMjidCqEpvROUPq2h0YEQhuaSYhgWGgZBZCrBusm035pBdwOQ97lnYDgiwZDZD");
                client.Headers.Add("FacebookId", "501790562");

                //var stream = client.OpenRead(@"http://*****:*****@"http://f34e2b0b303842659d3e58ed6dc844a5.cloudapp.net:8080/RESTfulWCFUsersServiceEndPoint.svc/" + path);

                var user = new User
                {
                    FacebookId = "501790562",
                    FirstName = "Benson",
                    LastName = "Chiu",
                    Email = "*****@*****.**",
                    CreditBalance = 100,
                    //CoffeeIconId = 1,
                    Sex = "Male",
                    Phone = "97366637",
                    Birthday = null,
                    CreatedDateTime = DateTime.MaxValue,
                    LastUpdatedDateTime = DateTime.MaxValue,
                };

                var stream1 = new MemoryStream();
                var ser = new DataContractJsonSerializer(typeof(User));
                ser.WriteObject(stream1, user);
                stream1.Position = 0;
                var sr = new StreamReader(stream1);
                var json = sr.ReadToEnd();
                client.Headers.Add("Content-Type", "application/json");
                var stream = client.UploadString(@"http://localhost:8080/RESTfulWCFUsersServiceEndPoint.svc/" + path, json);

                //var reader = new StreamReader(stream);
                //var response = reader.ReadToEnd();
                Console.WriteLine(stream);
                Console.WriteLine();
            }
        }
        public User AddNewUser(User u)
        {
            RequestClient = new WebClient();
            RequestClient.Headers.Add("Authorization", _facebookToken);
            RequestClient.Headers.Add("FacebookId", _facebookId);
            RequestClient.Headers.Add("Content-Type", "application/json");

            var memoryStream = new MemoryStream();
            GetSerializer(typeof(User)).WriteObject(memoryStream, u);

            memoryStream.Position = 0;
            var sr = new StreamReader(memoryStream);
            var json = sr.ReadToEnd();

            var userJsonString = RequestClient.UploadString(_host + @"users", json);

            var byteArray = Encoding.ASCII.GetBytes( userJsonString );
            var stream = new MemoryStream( byteArray );

            var user = GetSerializer(typeof (User)).ReadObject(stream) as User;

            if (RequestClient.ResponseHeaders.AllKeys.Contains("Authorization"))
            {
                ToSavourToken = RequestClient.ResponseHeaders["Authorization"];
            }

            return user;
        }
        public User UpdateUser(string userId, User user)
        {
            if (string.IsNullOrEmpty(ToSavourToken))
            {
                throw new InvalidOperationException("No ToSavour Token is set");
            }

            RequestClient = new WebClient();
            RequestClient.Headers.Add("Authorization", ToSavourToken);
            RequestClient.Headers.Add("Content-Type", "application/json");

            var memoryStream = new MemoryStream();
            GetSerializer(typeof(User)).WriteObject(memoryStream, user);

            memoryStream.Position = 0;
            var sr = new StreamReader(memoryStream);
            var json = sr.ReadToEnd();

            var userJsonString = RequestClient.UploadString(_host + @"users/" + userId, "PUT", json);

            var byteArray = Encoding.ASCII.GetBytes(userJsonString);
            var stream = new MemoryStream(byteArray);

            var updatedUser = GetSerializer(typeof(User)).ReadObject(stream) as User;

            return updatedUser;
        }
        public User AddNewUser(User user)
        {
            user.Id = Guid.NewGuid();
            user.CreatedDateTime = DateTime.UtcNow;
            user.LastUpdatedDateTime = DateTime.UtcNow;

            // Verify no Duplicate user has been created before, if not, give 20 credit.
            // other wise reply error message mention user already exist
            user.CreditBalance = 20;

            if (string.IsNullOrEmpty(user.Phone))
            {
                HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                HttpContext.Current.Response.Output.WriteLine("Missing Phone Number");
            }

            // Verify phone # is of correct format

            // Verify Users has the right Sms Auth Code

            _dbContext.Users.Add(user);
            _dbContext.SaveChanges();
            var dbUser = _dbContext.Users.FirstOrDefault(u => u.FacebookId == user.FacebookId);

            // Generate Local Domain Token for user
            if (dbUser != null)
            {
                var swt = new SimpleWebToken();
                swt.AddClaim("id", user.Id.ToString());
                swt.AddClaim("fbid", user.FacebookId);
                var computedToken = swt.ToString();
                HttpContext.Current.Response.Headers.Add("Authorization", computedToken);
            }

            return dbUser;
        }
        public User UpdateUser(string userId, User user)
        {
            if (_userId == Guid.Empty || userId != _userId.ToString())
            {
                HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                return null;
            }

            // TODO Validation for incoming User Object

            var dbUser = _dbContext.Users.Attach(user);

            if (dbUser == null)
            {
                HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.NotFound;
                return null;
            }

            // Go thru each property to update
            foreach (var p in typeof (User).GetProperties().Where(x => x.Name != "id" && !x.GetGetMethod().IsVirtual).ToList())
            {
                // get the value
                var v = p.GetValue(user, null);

                // Assume null means that the property wasn't passed from the client
                if (v == null)
                    continue;

                // Set this property on the entity to modified unless it's ID which won't change
                _dbContext.Entry(user).Property(p.Name).IsModified = true;
            }

            _dbContext.SaveChanges();
            return user;
        }