簡體   English   中英

C# GetResponse() 如何使動態創建的 url 超時?

[英]C# GetResponse() How to timeout dynamically created 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 有助於維護客戶端的池化和生命周期

在您的啟動 class 中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM