如何解决C# GetResponse() 如何使动态创建的 url 超时?
这是我的方法,我将 url 传递给它以检查它是否处于活动状态。 该链接正在 wowza 服务上激活,因此需要一些时间才能“激活”
GetResponse 返回 404 错误,因为未到达该 url。
如果 url 在指定时间后不存在,有没有办法获得超时而不是 404 错误?
public async Task<IActionResult> GetLinkIsAlive([FromQuery] string url,[FromQuery] int timeout)
{
HttpWebResponse webResponse;
try
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Timeout = timeout;
webRequest.Method = "GET";
webResponse = webRequest.GetResponse() as HttpWebResponse;
return Ok(webResponse.StatusCode);
}
catch (WebException ex)
{
return BadRequest(ex.Message);
}
}
解决方法
您可以使用连接池。
使用 IHttpClientFactory 有助于维护客户端的池和生命周期
在你的创业班:
services.AddHttpClient<NameofyourService,NameofyourService>()
.AddTransientHttpErrorPolicy(
p => p.WaitAndRetryAsync(new[]
{
TimeSpan.FromSeconds(1),TimeSpan.FromSeconds(5),TimeSpan.FromSeconds(10)
}));
它需要 Microsoft.Extensions.Http.Polly 您需要为您的服务使用 HttpClient。所有添加的配置都将自动应用。
,我对此的解决方案是每 1 秒调用一次 while 循环中的链接并等待整个任务。
private async Task<bool> IsLiveStreamAlive(string streamUrl,int retriesCount = 30)
{
try
{
bool res = false;
HttpClient client = new HttpClient();
Uri uri = new Uri(streamUrl);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
var request = new HttpRequestMessage(HttpMethod.Get,uri);
while (retriesCount > 1)
{
await Task.Delay(1000);
retriesCount--;
HttpResponseMessage httpResponse = await client.GetAsync(uri);
res = httpResponse.StatusCode == HttpStatusCode.OK ? true : false;
if (res)
{
Log.Info(string.Format("Stream alive: {0}",streamUrl));
break;
}
}
return res;
}
catch (WebException ex)
{
Log.Error(ex);
}
return false;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。