2016-04-27 42 views
1

我有一个从MVC数据库获取数据的.NET MVC项目。使用SQL数据库对IIS web软件包进行故障排除

当我在本地机器上以调试模式运行项目时,它运行时没有错误;然而,在使用Microsoft的Publish Wizard(创建一个.zip,将该.zip移动到网站所指向的wwwRoot文件夹)将项目部署到我的IIS服务器(我相信是版本6)之后,我遇到了一个问题:我访问网站的主页通过URL地址,但是当我输入登录ID时,它会产生一个内置的错误消息“无效的用户ID”。

输入有效的ID时唯一发生此错误的时间是数据库无法到达以检查登录凭证。因此,使用SQL Profiler,我试着查看是否对数据库进行了查询 - 看起来答案是“否”。

我已验证在IIS环境中正确配置了连接字符串,并且可以安全地假定这个问题没有与代码相关的错误。

的问题:还有什么其他的故障排除方法可用于IIS和SQL互动,看看这个错误的根源是,或者你可能有什么样的建议,试图消除这一问题

+1

IIS服务器上的应用程序事件。防火墙是否打开?他们在同一个域名? IIS服务器实际上可以'看''sql server吗?此外,您可能需要记录失败/成功的登录尝试。默认情况下,SQL Server不记录失败的尝试。 – WickedFan

+0

IIS服务器上的事件日志(与托管SQL服务器的机器相同)提供了一条错误消息:“用户'IIS APPPOOL \ OPOC'登录失败。原因:无法打开明确指定的数据库”。我确定它们在同一个域中,因为这个IIS服务器已经运行了一段时间的这个项目的测试环境。无论是否可以看到SQL服务器,我不确定如何确认,但是我曾假设如此,因为在我对部分视图进行了一些更改之后重新部署了应用程序之前,它已经工作了。 –

+0

我检查了安全文件夹为SQL服务器,并且已将APPPOOL \ OPOC添加到登录列表中,所以我不认为我使用的AppPool是问题所在,但我完全不熟悉IIS部署,所以或多或少,所以我可能是错的 –

回答

1

将用户添加到数据库中登录并授予此用户对数据库的访问权限。你的代码中的连接字符串应该有它的凭据。在你的机器上工作的原因很可能是因为你是服务器上的系统管理员或其他东西。查找一种方法在连接字符串的参数中输入凭据。

https://www.youtube.com/watch?v=Sp6lR15iWMk

+0

在查看生产服务器后发现的另一件事 - 它具有设置为NetworkService的AppPool的Identity。我在测试环境中完成了这个工作,并且它也可以工作。我假定“网络服务”标识将权限授予任何具有有效网络访问权限的人员? –

+1

严..在域控制环境中清除“NetworkService”。强烈建议在域级别创建服务帐户。 – WickedFan

+0

有趣,感谢您的警告!因为这不是一个非常关键的应用程序,所以我假设我的前任创建了所有这些,只是做了他似乎喜欢经常使用的“任何可以使其工作”的方法。将Identity设置为LocalSystem仍然允许域中的所有计算机访问该应用程序(只要它们根据域权限被允许),还是需要专门在主机箱上提升状态?仍然在我的脑海里整理出来,但是你比任何人都能给出更好的信息,所以我想我会问。 –