c# - 如何在 Windows Azure 上为 Windows Phone 使用 Microsoft Translator API?

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

以前可以通过 SOAP 接口(interface)轻松访问 bing 翻译器。现在它已经迁移到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。 我不知道该怎么做。请帮忙。 谢谢

最佳答案

在 Bing Translator 团队的帮助下,我让它在我的 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() 来获取异步结果。

关于c# - 如何在 Windows Azure 上为 Windows Phone 使用 Microsoft Translator API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001438/

相关文章:

javascript - 是否可以像来自用户一样向 Bot Framework 发送消息?

c# - 按具有混合值的两个条件对值进行分组

wpf - CollectionViewSource.GetDefaultView 不在 Silverlight 3 中!有什么解决办法吗?

Silverlight:如何确定我的控件如何获得焦点?

c# - 如何查看元素在屏幕中是否可见?

Windows 手机上的 Linq

c# - LINQ 表达式返回属性值?

c# - DependencyProperty Silverlight 用户控件

windows-phone-7 - 如何在 Windows Phone 7 中解析 HTML 页面数据?

c# - 可空类?