private void RenewAccessToken()
        {
            DatamarketAccessToken newAccessToken = HttpPost(DatamarketAccessUri, this.request);

            this.token = newAccessToken;
            System.Diagnostics.Debugger.Log(1, "failure", string.Format("Renewed token for user: {0} is: {1}", this.clientId, this.token.access_token));
        }
        // Obtain AccessToken using method at http://msdn.microsoft.com/en-us/library/hh454950.aspx
        public DatamarketAuthenticator(string clientId, string clientSecret)
        {
            this.clientId     = clientId;
            this.clientSecret = clientSecret;

            this.request = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", HttpUtility.UrlEncode(clientId), HttpUtility.UrlEncode(clientSecret));
            this.token   = HttpPost(DatamarketAccessUri, this.request);

            accessTokenRenewer = new Timer(new TimerCallback(OnTokenExpiredCallback), this, TimeSpan.FromMinutes(RefreshTokenDuration), TimeSpan.FromMilliseconds(-1));
        }
        private DatamarketAccessToken HttpPost(string DatamarketAccessUri, string requestDetails)
        {
            WebRequest webRequest = WebRequest.Create(DatamarketAccessUri);

            webRequest.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);

            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Method      = "POST";
            byte[] bytes = Encoding.ASCII.GetBytes(requestDetails);
            webRequest.ContentLength = bytes.Length;
            using (Stream outputStream = webRequest.GetRequestStream())
            {
                outputStream.Write(bytes, 0, bytes.Length);
            }
            using (WebResponse webResponse = webRequest.GetResponse())
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DatamarketAccessToken));
                DatamarketAccessToken      token      = (DatamarketAccessToken)serializer.ReadObject(webResponse.GetResponseStream());
                return(token);
            }
        }