【问题标题】:On Redirect - Failed to generate a user instance of SQL Server重定向时 - 无法生成 SQL Server 的用户实例
【发布时间】:2010-05-19 19:42:29
【问题描述】:

您好(抱歉,这篇文章很长),

我正在用 ASP.NET MVC 2 编写一个应用程序,当我远程连接到我的服务器时,我收到了这个错误。

由于检索用户的本地应用程序数据路径失败,无法生成 SQL Server 的用户实例。请确保用户在计算机上有本地用户配置文件。连接将被关闭。

我以为我已经在本地解决了这个问题,因为如果使用以下代码将站点重定向到 baseUrl 时,我会在调试中收到此错误:

    protected override void Initialize(RequestContext requestContext)
    {
        string[] host = requestContext.HttpContext.Request.Headers["Host"].Split(':');

        _siteProvider.Initialise(host, LiveMeet.Properties.Settings.Default["baseUrl"].ToString());

        base.Initialize(requestContext);
    }

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (Site == null)
        {
            string[] host = filterContext.HttpContext.Request.Headers["Host"].Split(':');

            string newUrl;

            if (host.Length == 2)
                newUrl = "http://sample.local:" + host[1];
            else
                newUrl = "http://sample.local";

            Response.Redirect(newUrl, true);

        }

        ViewData["Site"] = Site;
        base.OnActionExecuting(filterContext);
    }
    public Site Site
    {
        get
        {
            return _siteProvider.GetCurrentSite();
        }
    }

Site 对象是从名为 siteProvider 的 Provider 返回的,它会进行两次检查,一次针对包含所有可用子域列表的数据库,然后如果未能找到有效的子域或有效域名,则搜索内存缓存保留域,如果没有命中则返回一个baseUrl,所有无效域都被重定向。

当我将 true 添加到 Response.Redirect 时,这在本地起作用,假设暂停当前执行并在浏览器重定向上重新启动执行。

我在堆栈跟踪中发现第二次尝试访问数据库时会引发错误。

    #region ISiteProvider Members

    public void Initialise(string[] host, string basehost)
    {
        if (host[0].Contains(basehost))
            host = host[0].Split('.');

        Site getSite = GetSites().WithDomain(host[0]);

        if (getSite == null)
        {
            sites.TryGetValue(host[0], out getSite);
        }

        _site = getSite;
    }

    public Site GetCurrentSite()
    {
        return _site;
    }

    public IQueryable<Site> GetSites()
    {
        return from p in _repository.groupDomains
               select new Site
               {
                   Host = p.domainName,
                   GroupGuid = (Guid)p.groupGuid,
                   IsSubDomain = p.isSubdomain
               };
    }

    #endregion

首先命中 Linq 查询 ^^^,过滤器为 WithDomain,直到尝试使用 WithDomain 过滤器时才会抛出错误。

总而言之:页面重定向后会出现错误,因此第一次迭代在重定向后不久按预期执行(因此数据库的权限是正确的,用户配置文件等),当它过滤可能的数据库查询时当前重定向页面的域/子域,它会出错。

【问题讨论】:

    标签: asp.net-mvc database exception


    【解决方案1】:

    如果在 windows 7 和 IIS 7.5 下,请确保 App Pool 设置为 NetworkService

    我为此苦苦寻找了很久,这一直是我的错误。似乎有时有人决定更改我的应用程序池设置并更改了我的应用程序的应用程序池。但由于某种奇怪的原因,直到我尝试使用重定向代码时它才对我产生影响。

    在添加代码之前,所有数据库都连接没有任何问题,并且数据被提取而没有错误,但后来它没有,所以在查看我的 appool 后,我注意到它不再设置为 networkservice,切换,修复。

    所以也许这个问题应该是,为什么数据库连接会在新代码之前工作,而不是在不在 networdservice 用户下的情况下工作?

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多