2014-02-17 60 views
0

我被要求对现有的MVC网站进行更改,但不幸的是,该网站的原始开发人员不在公司,没有任何文档,也没有人真正了解它不是目前运行在我们的测试&现场环境。 呻吟无法在本地运行MVC Web应用程序

反正当我设置项目为抓手项目并运行它,我得到以下可爱的白色错误页:

Access is denied.

Description: An error occurred while accessing the resources required to serve this request. The server may not be configured for access to the requested URL.

Error message 401.2.: Unauthorized: Logon failed due to server configuration. Verify that you have permission to view this directory or page based on the credentials you supplied and the authentication methods enabled on the Web server. Contact the Web server's administrator for additional assistance.

不是大量的钱让我继续(至少对我来说)。 所以我在web.config文件检查和authorization设置为:

<authorization> 
    <deny users=”?” /> 
</authorization> 

如果我改变了对下面的代码我得到一个页面,指出它无法加载,但它是一个一步因为我至少可以进入一些代码。

<authorization> 
     <allow users="*"/> 
    </authorization> 

代码没有做对Active Directory一些验证,其工作方式,我可以通过设置一个破发点,并移动过去的功能避开那个讨厌的安全代码。如果用户有效(我将断点移至此处),则代码本身不执行任何操作,但返回true,如果它们无效,则返回false。这是我能够在控制器中捕捉断点以查看是否发生任何事情的唯一方式,但没有任何内容突出。 该代码尽可能部分地在类中,它将使用LINQ来获取正确的信息。

public ReadOnlyCollection<Application> GetApplicationStatus() 
{ 
    using (ApplicationDBEntities context = new ApplicationDBEntities()) 
    { 

      var results = (from parameters in context.Parameters 
       join application in context.ApplicationIds on parameters.ApplicationId equals application.ApplicationId1 
       where parameters.ParameterName.Equals("DateTime", StringComparison.OrdinalIgnoreCase) && 
       !parameters.Application.Equals(0) 
      select new Application 
      { 
       ApplicationId = parameters.ServiceId, 
       ApplicationStatus = application.Status, 
       DateAdded = parameters.ParameterValue 
       }).ToList(); 

      return new ReadOnlyCollection<Application>(results); 
    } 
} 

在上面的代码获取results时会抛出EntityException,在异常的消息是“基础提供失败的打开。”具体的行强调是var results = (from parameters in context.Parameters

有了这个,我想通要么代码目前住的是不一样的我有什么(但愿不是这样),还是其他什么东西涨,这是当我发现了Inner Exception消息:Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'.
连接字符串如下:

<connectionStrings> 
    <add name="ApplicationDBEntities" connectionString="metadata=res://*/ApplicationDBModel.csdl|res://*/ApplicationDBModel.ssdl|res://*/ApplicationDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyServer;initial catalog=MyDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

它试图从中获取信息的SQL database是我可以直接访问的。这可能是因为IIS帐户没有访问权限吗?是否有任何提示或暗示试图找到此问题的根源?

+0

您能否介绍一下您的开发和生产环境的一些细节。它是否在两个环境中部署到IIS? –

+0

实时它被部署到IIS,本地我从项目的属性/ Web选项卡创建了一个虚拟目录,将它添加到我的本地IIS – MattR

+0

是否使用ActiveDirectory用户转到sql数据库(即对于每个用户网站你创建域用户并将其添加到SQL)? –

回答

1

在您的连接字符串中存在intergated security = true,这意味着您的网站尝试从身份验证身份的sql中获取数据,并以用户身份运行IIS的应用程序池。

因此,您应该运行您的iis应用程序池,具有db权限的用户可能位于您站点的其他资源上。

另一种可能性是有sql用户去db你应该改变配置文件中的连接字符串。

+0

因此,将DefaultAppPool更改为在我自己的登录下运行? – MattR

+0

还行,但它并不理想,因为它意味着该应用程序池中的所有其他应用程序现在都在我的凭据下运行。是否有我可以使用的标准帐户?以前它被设置为NetworkService。或者是否会更新SQL来进行设置? – MattR

+0

如果我是你,我会为这个应用程序创建特殊的应用程序池。 –

相关问题