【问题标题】:How to use the Microsoft Translator API over Windows Azure, for Windows Phone?如何在 Windows Azure 上为 Windows Phone 使用 Microsoft Translator API?
【发布时间】:2012-06-12 17:08:32
【问题描述】:

以前,必应翻译器可以通过 SOAP 界面轻松访问。现在它已迁移到 Windows Azure。我在 Azure 市场上注册了每月 10000 封信(免费)。如何通过 C# 中的 windows phone 通过翻译器 api 翻译文本?请帮忙。我不确定如何使用 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 仍为 null。结果的 Properties IsCompleted 为 true,并且 statusCode 为 OK。 我不知道该怎么做。请帮忙。 谢谢

【问题讨论】:

    标签: c# silverlight windows-phone-7 azure microsoft-translator


    【解决方案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() 来获得异步结果。

    【讨论】:

    • 非常感谢。我认为这应该可行,但 UseDefaultCredentials 是哪个类的属性。它应该是用户定义的吗?它不是提供的 TranslatorContainer 类的一部分。
    • 我可以在线聊天吗?关于这个,我想问一些事情。
    • @Avkash - 我遇到了与 OP 类似的错误。我正在尝试添加将“UseDefaultCredentia‌​ls”设置为 false 的代码行,但 TranslatorContainer 中的该变量不可用。你能解释一下吗?我正在使用 C# 开发本地 Windows 应用程序。
    【解决方案2】:

    我遇到了完全相同的问题,有人建议该问题可能与调用 GetLanguagesForTranslation 时异步结果在内部返回的方式有关,但是我没有进一步挖掘,只是使用 Execute() 来获取语言列表下面:

    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,很乐意为您提供帮助。我会尝试查找一些信息并在此处添加.. 不能说需要多长时间,但我肯定会尝试看看我能为你得到什么。请继续关注..谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多