Вопрос по windows-phone-7, c#, microsoft-translator, azure, silverlight – Как использовать Microsoft Translator API поверх Windows Azure для Windows Phone?

4

Ранее там был легко доступен переводчик bing через интерфейс SOAP. Теперь он был перенесен в Windows Azure. Я зарегистрировался на торговой площадке Azure за 10000 писем в месяц (бесплатно). Как я могу перевести текст через переводчик API, для Windows Phone в C #? Пожалуйста помоги. Я не уверен, как использовать BeginExecute и EndExecute для запросов.

Я скачал и добавил TranslatorContainer.cs в мой проект. Сейчас я просто пытаюсь получить языки с помощью метода GetLanguagesForTranslation. Это код, который я написал.

public partial class PhonePage1 : PhoneApplicationPage
{

    public PhonePage1()
    {
        InitializeComponent();

        Translator transInstance = new Translator();

    }
    class Translator
    {
        private Uri service_root;
        private TranslatorContainer context;

        public Translator()
        {
            service_root = new Uri("https://api.datamarket.azure.com/Bing/MicrosoftTranslator/");
            context = new TranslatorContainer(service_root);
            context.Credentials = new NetworkCredential("ID","...........");
            var query = context.GetLanguagesForTranslation();
            query.BeginExecute(OnQueryComplete, query);
        }

        public void OnQueryComplete(IAsyncResult result)
        {
            var query = result as DataServiceQuery<Language>;

            string langstring = "";
            foreach (Language lang in query.EndExecute(result))
            {
                langstring += lang.Code + "\n";
            }
            MessageBox.Show(langstring);
        }
    }
}

В OnQueryComplete ()query является нулевым даже после назначения. Результат имеет свойства IsCompleted как true, а statusCode в порядке. Я не могу понять, как это сделать. Пожалуйста помоги. Спасибо

Ваш Ответ

2   ответа
2

и мне предложили, что проблема может быть связана с тем, как результаты Async возвращаются внутренне при вызове GetLanguagesForTranslation, однако я не копал дальше и просто использовал Execute (), чтобы получить список Language, как показано ниже:

var serviceUri = new Uri("https://api.datamarket.azure.com/Bing/MicrosoftTranslator/");
var accountKey = "***********************"; // 
var tcode = new TranslatorContainer(serviceUri);
tcode.Credentials = new NetworkCredential(accountKey, accountKey);
var languages = tcode.GetLanguagesForTranslation().Execute().ToArray(); 
foreach (var i in languages)
{
    Console.WriteLine(i.Code);
}

Не уверен, что это то, что вы ищете, но в моем случае это сработало хорошо.

Я могу понять, что вы говорите, но нет метода Execute. В этом случае Silverlight разрешает только асинхронные вызовы. Итак, я должен использовать BeginExecute (), но это то, что я не уверен, как использовать. Пожалуйста, помогите, если вы знаете что-нибудь об этом. Vignesh PT
Конечно, Виньеш, буду рад помочь тебе. Я постараюсь найти некоторую информацию и добавить сюда .. не могу сказать, сколько времени это займет, но я обязательно постараюсь увидеть, что я могу получить для вас. Пожалуйста, оставайтесь мелодии .. Спасибо!
3

light:

UseDefaultCredentials needs to be turned off on the proxy

On the async callback, you were casting the result to a DSQ, but it’s the result’s AsyncState that needs to be casted. See below.

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    var serviceUri = new Uri("https://api.datamarket.azure.com/Bing/MicrosoftTranslator/");
    var accountKey = "**********************"; // 
    var tcode = new Microsoft.TranslatorContainer(serviceUri);

    tcode.Credentials = new NetworkCredential(accountKey, accountKey);
    tcode.UseDefaultCredentials = false;
    var query = tcode.GetLanguagesForTranslation();
    query.BeginExecute(OnQueryComplete, query);
}

public void OnQueryComplete(IAsyncResult result)
{
    var query = (DataServiceQuery<Microsoft.Language>)result.AsyncState;
    var enumerableLanguages = query.EndExecute(result);
    string langstring = "";
    foreach (Microsoft.Language lang in enumerableLanguages)
    {
        langstring += lang.Code + "\n";
    }
    MessageBox.Show(langstring);
}

Таким образом, вы можете использовать BeginExecute () и BeginEnd () для получения результатов Async.

Большое спасибо. Я думаю, что это должно работать, но UseDefaultCredentials является свойством какого класса. Это должно быть определено пользователем? Он не является частью предоставленного класса TranslatorContainer. Vignesh PT
я могу поймать тебя в чате онлайн? Я хочу спросить кое-что об этом. Vignesh PT
@Avkash - Я получаю те же ошибки, что и ОП. Я пытаюсь добавить строку кода, которая устанавливает & quot; UseDefaultCredentia & # x200C; & # x200B; ls & quot; в false, но эта переменная внутри TranslatorContainer недоступна. Не могли бы вы объяснить? Я работаю в C # для локального приложения Windows.

Похожие вопросы