-->

如何使用微软翻译API过的Windows Azure,Windows Phone的?(How to

2019-07-29 21:17发布

此前有在必应翻译为与SOAP接口方便。 现在,它已被迁移到Windows Azure。 我已经注册在Azure的市场上为每月(免费)10000号。 我如何翻译在C#中通过翻译API文本适用于Windows Phone? 请帮忙。 我不知道如何使用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为真,的StatusCode是OK。 我无法弄清楚如何去这件事。 请帮忙。 谢谢

Answer 1:

来自必应翻译团队帮助我得到了它在我的Silverlight应用程序的工作:

  1. UseDefaultCredentials需要被关闭的代理

  2. 在异步回调,你铸造结果为DSQ,但它的结果的AsyncState需要进行铸造。 见下文。

     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()来获取异步结果。



Answer 2:

我有完全相同的问题,我建议,这个问题可以与相关的异步结果如何返回内部调用GetLanguagesForTranslation的时候,但是我没有进一步的挖掘,只是用来执行()来获取如下语言列表:

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);
}

不知道如果这是你在找什么,但在我的情况下运作良好。



文章来源: How to use the Microsoft Translator API over Windows Azure, for Windows Phone?