我在使用(Windows Phone App)
调用相同的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();
}
答案 0 :(得分:1)
您可以从简化样品开始,例如:通过用var foo = reader.ReadToEnd();
替换整个内部部分 - 如果这有帮助,那么您知道错误的下一步。
如果这没有帮助,那么尝试(更长)间隔。在我的一些应用程序中,我发现只有X的HttpWebRequest实例在任何给定时间都可以处于活动状态,X在1到8之间,可能与请求地址有关,也可能与请求地址无关。我最终得到了一个帮助类,它将所有请求(连同它们的响应)排入队列,因此在任何给定时间只存在一个HttpWebRequest。
答案 1 :(得分:0)
我已经解决了这个问题,我改变了这样的标题: -
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();