繁体   English   中英

使用多个httpwebrequest在计时器中无法调用Webservice

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM