Windows Phone 8.1 中快速发送 HTTP 命令
Send HTTP command rapidly in Windows Phone 8.1
我有一个Vu+卫星盒子,我正在为盒子开发一个WP8.1遥控器。
Vu+ 盒子有一个网络服务并接受如下命令:http://192.168.1.11/web/remotecontrol?command={0}
我的代码是这样的:
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
string cmd = ((Button)sender).Tag.ToString();
SendBtnCommand(cmd);
}
catch { }
}
private async void SendBtnCommand(string cmd)
{
using (HttpClient h = new HttpClient())
{
string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
}
}
但是好像连接没有关闭。我只能发送一次相同的命令,然后必须等待一分钟才能再次发送相同的命令。
我可以连续发送多个不同的命令。
任何关于如何优化这个的帮助?
想出了丑陋的技巧。不过,我会尝试看看如何实现 headers。
string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}&{1}", cmd, DateTime.Now.Millisecond));
这样就不会缓存相同的命令。
您可以关闭缓存,而不是在 url 中传递额外的参数。
using (var h = new HttpClient())
{
h.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue {NoCache = true};
string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
}
这个缓存问题还有另一种解决方案。您可以像这样覆盖默认的 httpClientHandler
public class BypassCacheHttpRequestHandler : HttpClientHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Headers.IfModifiedSince == null)
request.Headers.IfModifiedSince = new DateTimeOffset(DateTime.Now);
return base.SendAsync(request, cancellationToken);
}
}
在启动您的 httpClient 时,您可以传递上述处理程序以避免缓存问题
using (var h = new HttpClient((new BypassCacheHttpRequestHandler(), true))
{
string x =await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
}
来源:
我有一个Vu+卫星盒子,我正在为盒子开发一个WP8.1遥控器。
Vu+ 盒子有一个网络服务并接受如下命令:http://192.168.1.11/web/remotecontrol?command={0}
我的代码是这样的:
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
string cmd = ((Button)sender).Tag.ToString();
SendBtnCommand(cmd);
}
catch { }
}
private async void SendBtnCommand(string cmd)
{
using (HttpClient h = new HttpClient())
{
string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
}
}
但是好像连接没有关闭。我只能发送一次相同的命令,然后必须等待一分钟才能再次发送相同的命令。 我可以连续发送多个不同的命令。
任何关于如何优化这个的帮助?
想出了丑陋的技巧。不过,我会尝试看看如何实现 headers。
string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}&{1}", cmd, DateTime.Now.Millisecond));
这样就不会缓存相同的命令。
您可以关闭缓存,而不是在 url 中传递额外的参数。
using (var h = new HttpClient())
{
h.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue {NoCache = true};
string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
}
这个缓存问题还有另一种解决方案。您可以像这样覆盖默认的 httpClientHandler
public class BypassCacheHttpRequestHandler : HttpClientHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Headers.IfModifiedSince == null)
request.Headers.IfModifiedSince = new DateTimeOffset(DateTime.Now);
return base.SendAsync(request, cancellationToken);
}
}
在启动您的 httpClient 时,您可以传递上述处理程序以避免缓存问题
using (var h = new HttpClient((new BypassCacheHttpRequestHandler(), true))
{
string x =await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
}
来源: