Ошибка неверного запроса Microsoft Translator (400)

Я видел темы по этому вопросу, но моя проблема особенно запутанная. У меня есть бесплатная подписка на 2 миллиона символов, действительный идентификатор клиента и секрет. Когда я запускаю свой код, я несколько раз успешно вызываю API (максимум, что я видел, это 75 последовательных успешных вызовов). Затем каждый второй вызов возвращает неверный запрос: удаленный сервер возвратил ошибку: (400) неверный запрос.

Я создаю токен один раз со своими учетными данными и никогда не создаю его снова. Я перебираю файл, анализирую его и отправляю каждую проанализированную строку для перевода, вызывая API. Кажется, что я достиг своего рода предела, о котором я сейчас знаю.

Когда я смотрю на мой аккаунт, кажется, что он не сбрасывает со счетов уже переведенные символы, что вызывает у меня сильное подозрение, что у меня неправильные учетные данные при создании токена. Я четыре раза проверил это, и все, кажется, в порядке.

Любое руководство о том, что я могу упустить здесь, будет высоко ценится.

Вот код, который создает токен. Однако я думаю, что может быть неизвестное ограничение, о котором я не знаю с бесплатной подпиской.

static void gettoken()
    {
        //Get access token
        string clientID = "my client id";
        string clientSecret = "my secret";
        String strTranslatorAccessURI = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13";
        String strRequestDetails = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", clientID, clientSecret);

        System.Net.WebRequest webRequest = System.Net.WebRequest.Create(strTranslatorAccessURI);
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.Method = "POST";

        byte[] bytes = System.Text.Encoding.ASCII.GetBytes(strRequestDetails);
        webRequest.ContentLength = bytes.Length;
        using (System.IO.Stream outputStream = webRequest.GetRequestStream())
        {
            outputStream.Write(bytes, 0, bytes.Length);
        }
        System.Net.WebResponse webResponse = webRequest.GetResponse();

        System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(AdmAccessToken));
        AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream());

        MyGlobals.headerValue = "Bearer " + token.access_token;
    }

А вот код, который вызывает сам API. Я вызываю метод API из цикла.

static void RunBing(string sterm)
    {
        //Submit the translation request
        string txtToTranslate = sterm;
        string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + txtToTranslate + "&from=en&to=es";
        System.Net.WebRequest translationWebRequest = System.Net.WebRequest.Create(uri);
        translationWebRequest.Headers.Add("Authorization", MyGlobals.headerValue);
        System.Net.WebResponse response = null;
        try {
            response = translationWebRequest.GetResponse();
        }
        catch (Exception e)
        {
            Console.WriteLine("Term failed: " + sterm);
            Console.WriteLine(e);
            return;
        }
        System.IO.Stream stream = response.GetResponseStream();
        System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
        System.IO.StreamReader translatedStream = new  System.IO.StreamReader(stream, encode);
        System.Xml.XmlDocument xTranslation = new System.Xml.XmlDocument();
        xTranslation.LoadXml(translatedStream.ReadToEnd());
        MyGlobals.xlation = xTranslation.InnerText;
    } 

После нескольких успешных вызовов API я получаю следующее сообщение: System.Net.WebException: удаленный сервер возвратил ошибку: (400) Bad Request. в System.Net.HttpWebRequest.GetResponse() в Translate.TranslateText.Program.RunBing(String sterm)

0 ответов

Другие вопросы по тегам