C# 如何在Windows Azure上为Windows Phone使用Microsoft Translator API?
在此之前,bing翻译程序可以通过SOAP接口轻松访问。现在它已迁移到Windows Azure。我已经在Azure marketplace注册了每月10000封信(免费)。如何通过C#中windows phone的translator api翻译文本?请帮忙。我不知道如何使用BeginExecute和EndExecute进行查询 我已下载TranslatorContainer.cs并将其添加到我的项目中。目前,我只是尝试使用GetLanguagesForTranslation方法获取语言。这是我写的代码C# 如何在Windows Azure上为Windows Phone使用Microsoft Translator API?,c#,silverlight,windows-phone-7,azure,microsoft-translator,C#,Silverlight,Windows Phone 7,Azure,Microsoft Translator,在此之前,bing翻译程序可以通过SOAP接口轻松访问。现在它已迁移到Windows Azure。我已经在Azure marketplace注册了每月10000封信(免费)。如何通过C#中windows phone的translator 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);
}
}
}
公共部分类PhonePage1:PhoneApplicationPage
{
公用电话第1页()
{
初始化组件();
Translator transInstance=新的Translator();
}
类转换器
{
私有Uri服务\u根;
私人译者语境;
公共翻译()
{
服务\u根=新Uri(“https://api.datamarket.azure.com/Bing/MicrosoftTranslator/");
上下文=新的TranslatorContainer(服务\根);
context.Credentials=新的网络凭据(“ID”、“……”);
var query=context.GetLanguagesForTranslation();
query.BeginExecute(OnQueryComplete,query);
}
查询完成时公共作废(IAsyncResult结果)
{
var query=作为DataServiceQuery的结果;
字符串langstring=“”;
foreach(query.EndExecute(result)中的语言lang)
{
langstring+=lang.Code+“\n”;
}
MessageBox.Show(langstring);
}
}
}
在OnQueryComplete()中,查询
即使在赋值之后也是空的。结果的属性IsCompleted为true,statusCode为OK。
我不知道该怎么做。请帮忙。
谢谢我遇到了完全相同的问题,有人建议,这个问题可能和调用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);
}
不确定这是否是你正在寻找的,但它在我的情况下运作良好 在Bing翻译团队的帮助下,我让它在Silverlight应用程序中运行:
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);
}
private void按钮\u单击\u 1(对象发送者,路由目标)
{
var serviceUri=新Uri(“https://api.datamarket.azure.com/Bing/MicrosoftTranslator/");
var accountKey=“**********************”;//
var tcode=新的Microsoft.TranslatorContainer(serviceUri);
tcode.Credentials=新的网络凭据(accountKey,accountKey);
tcode.UseDefaultCredentials=false;
var query=tcode.GetLanguagesForTranslation();
query.BeginExecute(OnQueryComplete,query);
}
查询完成时公共作废(IAsyncResult结果)
{
var query=(DataServiceQuery)result.AsyncState;
var enumerableLanguages=query.EndExecute(结果);
字符串langstring=“”;
foreach(enumerableLanguages中的Microsoft.lang语言)
{
langstring+=lang.Code+“\n”;
}
MessageBox.Show(langstring);
}
通过这种方式,您可以使用BeginExecute()和BeginEnd()获得异步结果。我可以理解您的意思,但没有执行方法。在这种情况下,Silverlight只允许异步调用。因此,我必须使用BeginExecute(),但我不确定如何使用它。如果你知道这件事,请帮忙。当然,维格内斯,我很乐意帮你。我将尝试查找一些信息并在此处添加。。我不能说要花多长时间,但我一定会尽力看看我能为你做些什么。请留下来…谢谢!!谢谢。我认为这应该有效,但UseDefaultCredentials是哪个类的属性。它应该是用户定义的吗?这不是提供的TranslatorContainer类的一部分。我可以在网上聊天吗?关于这一点,我想问几个问题。@Avkash-我遇到了与OP类似的错误。我正在尝试添加设置“UseDefaultCredentia”的代码行ls”设置为false,但TranslatorContainer中的该变量不可用。你能解释一下吗?我在C#为一个本地windows应用程序工作。