Asp.net核心网站间歇性拒绝连接

时间:2020-06-24 06:42:57

标签: asp.net-core iis-express

我有一个asp.net core 3.0网站。它具有一个控制器,该控制器实现HttpGet函数,该函数执行一些数据库工作,然后返回Json对象(https:// localhost:44356 / api / runner / match)。

我有一个控制台应用程序,它使用HttpClient来访问该URL。我在本地启动站点,然后启动控制台应用程序。大约有50%的时间有效。我得到的另外50%的时间:

HttpRequestException: No connection could be made because the target machine actively refused it.
SocketException: No connection could be made because the target machine actively refused it.

我试图弄清为什么控制台应用程序的连接被阻止。我不知道如何开始调试它。我尝试对请求执行重试,但是一旦获得异常,我就会继续获取它。因此,我认为这是我网站中发生的不确定性事件,可能与SSL有关?

我可以在Chrome中本地访问网址。

我如何找出阻止连接的原因?

这是IIS Express正在做的事情吗?

在控制台应用程序中调用代码:

static async Task<List<Deck>> GetMatchData()
        {

            string baseUrl = "https://localhost:44356/api/runner/match";
         
            using (HttpClient client = new HttpClient())
            {
                HttpResponseMessage res = null;
                res = await client.GetAsync(baseUrl);

控制器功能:

    [HttpGet("match")]
    public async Task<ActionResult> GetMatchup()
    {
        int count = db.Decks.Count();

        Random r = new Random();

        int d1 = r.Next(count) + 1; // database ids start at 1 for some reason
        int d2 = r.Next(count - 1) + 1;

        if (d1 == d2)
            d2++;

        List<Deck> result = new List<Deck>();

        result.Add(await db.Decks.FindAsync(d1));
        result.Add(await db.Decks.FindAsync(d2));

        if (result[0] == null || result[1] == null)
        {
            return BadRequest();
        }

        return Ok(result);
    }

1 个答案:

答案 0 :(得分:-1)

尝试

HttpClient httpClient = new HttpClient();   

//specify to use TLS 1.2 as default connection
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

string baseUrl = "https://localhost:44356/api/runner/match";

httpClient.BaseAddress = new Uri(baseUrl );
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var getResult = await httpClient.GetAsync(baseUrl);