以前可以通过 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 应用程序中运行:
需要在代理上关闭 UseDefaultCredentials
在异步回调中,您将结果转换为 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/