Windows phone 7 向API发送多个请求时出现webclient I/O错误
我想做一个Twitter情绪分析Windows Phone应用程序 该应用程序根据用户输入的查询词检索所有相关tweet。例如,如果我在输入搜索框中输入“Windows Phone”,结果将显示包含“Windows Phone”术语的所有推文 这是代码(我从中获得) 将POST数据上载到API中Windows phone 7 向API发送多个请求时出现webclient I/O错误,windows-phone-7,c#-4.0,silverlight-4.0,Windows Phone 7,C# 4.0,Silverlight 4.0,我想做一个Twitter情绪分析Windows Phone应用程序 该应用程序根据用户输入的查询词检索所有相关tweet。例如,如果我在输入搜索框中输入“Windows Phone”,结果将显示包含“Windows Phone”术语的所有推文 这是代码(我从中获得) 将POST数据上载到API中 public void UploadData(Twit tweetPerSend) { if (NetworkInterface.GetIsNetworkAvailabl
public void UploadData(Twit tweetPerSend)
{
if (NetworkInterface.GetIsNetworkAvailable())
{
chatterbox.Headers[HttpRequestHeader.ContentType] = "application/x-www- form-urlencoded";
chatterbox.Headers["X-Mashape-Authorization"] = "MXBxYmptdjhlbzVnanJnYndicXNpN2NwdWlvMWE1OjA0YTljMWJjMDg4MzVkYWY2YmIzMzczZWFkNDlmYWRkNDYzNGU5NmI=";
var Uri = new Uri("https://chatterboxco-sentiment-analysis-for-social-media---nokia.p.mashape.com/sentiment/current/classify_text/");
StringBuilder postData = new StringBuilder();
postData.AppendFormat("{0}={1}", "lang", HttpUtility.UrlEncode("en"));
postData.AppendFormat("&{0}={1}", "text", HttpUtility.UrlEncode(tweetPerSend.DecodedText));
postData.AppendFormat("&{0}={1}", "exclude", HttpUtility.UrlEncode("is")); // disesuaikan
postData.AppendFormat("&{0}={1}", "detectlang", HttpUtility.UrlEncode("0"));
chatterbox.UploadStringAsync(Uri, "POST", postData.ToString());
chatterbox.UploadStringCompleted += new UploadStringCompletedEventHandler(chatterbox_UploadStringCompleted);
}
}
void chatterbox_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
var chatterbox = sender as WebClient;
chatterbox.UploadStringCompleted -= chatterbox_UploadStringCompleted;
string response = string.Empty;
if (!e.Cancelled)
{
response = HttpUtility.UrlDecode(e.Result);
nilaiKlasifikasi = ParsingHasil(response);
MessageBox.Show(nilaiKlasifikasi.ToString()); //just testing
//textBlock1.Text = response;
}
}
private double ParsingHasil(String response)
{
var result = Regex.Match(@response, @"(?<=""value"": )(-?\d+(\.\d+)?)(?=,|$)");
Debug.WriteLine(result);
double hasil = Convert.ToDouble(result.ToString());
//return Convert.ToInt32(result);
return hasil;
}
public void上传数据(Twit-tweetPerSend)
{
if(NetworkInterface.GetIsNetworkAvailable())
{
chatterbox.Headers[HttpRequestHeader.ContentType]=“应用程序/x-www-表单urlencoded”;
chatterbox.Headers[“X-Mashape-Authorization”]=“mxbxymptjhlbzvnanjnyndicxnpn2nwdwlvmwe1oja0ytljmwjjjmdg4mzvkywy2ymizcmzczzwfkndlmywrkndyzngu5nmi=”;
var Uri=新的Uri(“https://chatterboxco-sentiment-analysis-for-social-media---nokia.p.mashape.com/sentiment/current/classify_text/");
StringBuilder postData=新建StringBuilder();
appendData.AppendFormat(“{0}={1}”,“lang”,HttpUtility.UrlEncode(“en”);
appendData.AppendFormat(&{0}={1}”,“text”,HttpUtility.UrlEncode(tweetPerSend.DecodedText));
postData.AppendFormat(&{0}={1}”,“exclude”,HttpUtility.UrlEncode(“is”);//disesuaikan
appendData.AppendFormat(“&{0}={1}”,“detectlang”,HttpUtility.UrlEncode(“0”);
UploadStringAsync(Uri,“POST”,postData.ToString());
chatterbox.UploadStringCompleted+=新的UploadStringCompletedEventHandler(chatterbox\u UploadStringCompleted);
}
}
void chatterbox_UploadStringCompleted已完成(对象发送方,UploadStringCompletedEventArgs e)
{
var chatterbox=作为网络客户端的发送方;
chatterbox.UploadStringCompleted-=chatterbox\u UploadStringCompleted;
字符串响应=string.Empty;
如果(!e.取消)
{
response=HttpUtility.UrlDecode(e.Result);
nilaiKlasifikasi=Parsingasil(响应);
MessageBox.Show(nilaiklasifkasi.ToString());//只是测试
//textBlock1.Text=响应;
}
}
专用双PARSINGASIL(字符串响应)
{
var result=Regex.Match(@response,@)(?您必须一次同步执行一个UploadStringAsync。(即,在UploadStringCompleted处理程序中链执行下一个UploadStringAsync)
或者,为每个UploadStringAsync创建一个新的WebClient。在哪一行出现此错误/异常?@PeterRitchie:在这一行“chatterbox.UploadStringAsync(Uri,“POST”,postData.ToString());”调试代码后,我意识到,连接请求apiforeach的方法(twitterResults.results中的Twit Tweet)thisApp.klasifikasi.UploadData(推特);//请求
,尽管过去的过程尚未完成,但仍会继续触发..如何解决此问题?如我的回答中所述,您必须等到调用UploadStringCompleted处理程序后再调用下一个UploadDataHow知道UploadStringCompleted是否被调用/完成?您有处理上载的代码tringCompleted事件——这就是你知道的。
TwitterService.Search(
text,
(items) => { PositiveList.ItemsSource = items; },
(exception) => { MessageBox.Show(exception.Message); },
null
);
public void UploadData(Twit tweetPerSend)
{
if (NetworkInterface.GetIsNetworkAvailable())
{
chatterbox.Headers[HttpRequestHeader.ContentType] = "application/x-www- form-urlencoded";
chatterbox.Headers["X-Mashape-Authorization"] = "MXBxYmptdjhlbzVnanJnYndicXNpN2NwdWlvMWE1OjA0YTljMWJjMDg4MzVkYWY2YmIzMzczZWFkNDlmYWRkNDYzNGU5NmI=";
var Uri = new Uri("https://chatterboxco-sentiment-analysis-for-social-media---nokia.p.mashape.com/sentiment/current/classify_text/");
StringBuilder postData = new StringBuilder();
postData.AppendFormat("{0}={1}", "lang", HttpUtility.UrlEncode("en"));
postData.AppendFormat("&{0}={1}", "text", HttpUtility.UrlEncode(tweetPerSend.DecodedText));
postData.AppendFormat("&{0}={1}", "exclude", HttpUtility.UrlEncode("is")); // disesuaikan
postData.AppendFormat("&{0}={1}", "detectlang", HttpUtility.UrlEncode("0"));
chatterbox.UploadStringAsync(Uri, "POST", postData.ToString());
chatterbox.UploadStringCompleted += new UploadStringCompletedEventHandler(chatterbox_UploadStringCompleted);
}
}
void chatterbox_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
var chatterbox = sender as WebClient;
chatterbox.UploadStringCompleted -= chatterbox_UploadStringCompleted;
string response = string.Empty;
if (!e.Cancelled)
{
response = HttpUtility.UrlDecode(e.Result);
nilaiKlasifikasi = ParsingHasil(response);
MessageBox.Show(nilaiKlasifikasi.ToString()); //just testing
//textBlock1.Text = response;
}
}
private double ParsingHasil(String response)
{
var result = Regex.Match(@response, @"(?<=""value"": )(-?\d+(\.\d+)?)(?=,|$)");
Debug.WriteLine(result);
double hasil = Convert.ToDouble(result.ToString());
//return Convert.ToInt32(result);
return hasil;
}