[英]using multi httpwebrequest to call webservice in timer not working
我在使用(Windows Phone App)调用相同的URL时遇到问题
HttpWebRequest.Create(new Uri("http://x.x.x.x/webservice.svc/Getnewtick")) as HttpWebRequest
我在函数中使用了此请求,并且此函数在计时器上起作用,我已经使用提琴手检查了流量,我发现第一个请求可以正常工作,但是第二个没有发送到服务器,并且新请求不能发送到服务器,可以建议我(注意我已经把该函数内部的消息框及其在时间上显示得很好,这意味着计时器可以正常工作)
这是我根据您的要求提供的代码:-
private void FireRequest3(Object sender, EventArgs args)
{
MessageBox.Show("hello");
var request = HttpWebRequest.Create(new Uri("http://x.x.x.x/webservice.svc/Getnewtick")) as HttpWebRequest
request.Method = "GET";
request.CookieContainer = cookieJar;
request.BeginGetResponse(ar =>
{
HttpWebRequest req2 = (HttpWebRequest)ar.AsyncState;
using (var response = (HttpWebResponse)req2.EndGetResponse(ar))
{
using (Stream stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
var outerRoot2 = JsonConvert.DeserializeObject<OuterRootObject2>(reader.ReadToEnd());
var root = JsonConvert.DeserializeObject<RootObject2>(outerRoot2.d);
DispatchInvoke(() =>
{
foreach (var Symbols1 in root.Symbols)
{
foreach (var nnn in DataReceivedCollection)
{
var symbolIDintold = Convert.ToInt16(nnn.symid);
var symbolIDintnew = Convert.ToInt16(Symbols1.I);
var BidStr = Convert.ToString(Symbols1.B);
var AskStr = Convert.ToString(Symbols1.B);
if (symbolIDintold == symbolIDintnew)
{
nnn.textSecond = BidStr;
nnn.textThird = AskStr;
}
}
}
});
}
}
}
}, request);
}
带有计时器的开始按钮是:-
private void Button_Click_2(object sender, EventArgs e)
{
DispatcherTimer newTimer = new DispatcherTimer();
newTimer.Interval = TimeSpan.FromSeconds(3);
newTimer.Tick += FireRequest3;
newTimer.Start();
}
您可以从简化示例开始,例如,将整个内部替换为var foo = reader.ReadToEnd();
-如果这有帮助,那么您就知道下一步查找错误了。
如果这样做没有帮助,请尝试更长的间隔。 在我的一些应用程序中,我发现在任何给定时间,只有X个HttpWebRequest实例可以处于活动状态,其中X介于1到8之间,并且可能与请求地址无关。 我最后得到了一个帮助程序类,该类使所有请求(以及它们的响应)入队,以便在任何给定时间仅存在一个HttpWebRequest。
我已经解决了这样的问题,我改变了标题是这样的:-
HttpWebRequest.Create(new Uri("http://x.x.x.x/webservice.svc/Getnewtick")) as HttpWebRequest
if (request.Headers == null)
{
request.Headers = new WebHeaderCollection();
}
request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.