如何在Windows Azure上使用Microsoft Translator API,适用于Windows Phone
本文关键字:Windows API Translator Microsoft 适用于 Phone Azure | 更新日期: 2023-09-27 18:36:52
以前,Bing转换器可以通过SOAP接口轻松访问。现在它已被迁移到Windows Azure。我已经在 Azure 市场中注册了每月 10000 封信(免费)。 如何通过翻译器api翻译文本,适用于C#中的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
也是空的。结果的"属性已完成"为 true,状态代码为 OK。我不知道该怎么做。请帮忙。谢谢
在必应翻译团队的帮助下,我让它在我的 Silverlight 应用程序中工作:
-
需要在代理上关闭使用默认凭据
-
在异步回调中,你已将结果强制转换为 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() 来获取异步结果。
我遇到了完全相同的问题,有人建议该问题可能与调用 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);
}
不确定这是否是您正在寻找的,但它在我的情况下效果很好。