从睡眠中唤醒ASP.NET Web API中的SQL查询失败

时间:2015-10-16 07:34:33

标签: sql-server entity-framework asp.net-web-api2

我们遇到ASP.NET Web Api 2和MSSQL的边缘情况错误。情况是这样的:

  1. 外部进程正在将复杂令牌存储在数据库记录中 以及标识记录的更简单的令牌。
  2. 然后外部进程将用户重定向到我们的API中的端点,并在URL中传递简单令牌。
  3. API使用简单令牌查找数据库并检索复杂令牌
  4. 然后将用户重定向到另一个URL,并将复杂令牌注入响应的窗口对象。
  5. 问题在于:

    来自不同用户的两个同时请求进入以检索服务器的复杂令牌。第一个请求失败。第二个请求被提供与第一个请求相关联的复杂令牌。

    仅当Windows Server从睡眠状态唤醒时才会出现此情况。

    在所有其他时间,用户发送简单令牌并接收正确的复杂令牌。

    任何人都可以了解造成问题的原因以及解决方法吗?

    与此案例相关的代码的简化版本如下:

    // The Controller action that receives the simple Token
    public ActionResult GetToken(string simpleToken)
    {
        ApiOutput.UserToken.Token = QueryToken(simpleToken);
    
        return RedirectToAction("Index");
    }
    
    // The method that retrieves the complex token from the database
    public static string QueryToken(string simpleToken)
    {
        using (var _wdb = new AppDbContext())
        {
            var data = _wdb.TokenData.FirstOrDefault(d => d.SimpleToken == simpleToken);
    
            return data.ComplexToken;
        }
    }
    
    // Controller Index action
    public ActionResult Index()
    {
        return View();
    }
    
    
    
    <!-- The Index view where the complex token is returned -->
    @{ Layout = null; }
    @using myApp.Models
    @model ApiOutput.UserToken
    
    <!DOCTYPE html>
    <html>
    <body>
            <script>
                window.dbtoken = "@ApiOutput.UserToken.Token";
            </script>
    
    </body>
    </html>
    

0 个答案:

没有答案