在定时器不工作时使用multi-httpwebrequest调用webservice

本文关键字:multi-httpwebrequest 调用 webservice 定时器 工作 | 更新日期: 2023-09-27 18:01:07

我在使用(Windows Phone应用程序(调用同一URL时遇到问题

HttpWebRequest.Create(new Uri("http://x.x.x.x/webservice.svc/Getnewtick")) as HttpWebRequest

我在功能内部使用这个请求,这个功能在计时器上工作,我用fiddler检查了流量,我发现第一个请求工作,但第二个不发送新请求到服务器,你能告诉我吗(注意,我在功能中放了消息框,它在时间上显示得很好,这意味着计时器工作得很好(

这是我的代码,根据您的要求:-

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();
}

在定时器不工作时使用multi-httpwebrequest调用webservice

您可以从简化样本开始,例如用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();