0

我将从道歉开始;我不确定这是否最好张贴在这里的服务器故障所以如果它在错误的地方然后请移动:-)

基本信息

我在工作中编写了一个新应用程序的第一个模块。这是使用 Visual Studio 2010 编写的,目标是 .net 3.5(目前)和 asp.net mvc 2。这在 VS 的内置开发服务器上运行的开发过程中运行良好,但是一旦部署到 IIS 7 就无法运行/7.5。

为了部署应用程序,我在发布模式下构建了它,并通过在解决方案资源管理器中右键单击项目创建了一个部署包(一旦从 beta 升级,这将通过 tfs 中的自动构建来完成)。然后将其导入服务器上的 IIS。

该应用程序正在使用 Windows/域身份验证。

问题 #1

我可以启动 Internet Explorer 并从客户端计算机以及远程桌面连接上浏览到应用程序。我可以在远程桌面上的 IE 实例中执行读取/存储数据的代码,但如果我从客户端 PC 浏览到它,它似乎会丢失会话状态。我单击表单提交,页面刷新并且不执行所需的代码。我试过设置;InProc、SQLServer 和 StateServer。但没有运气:-(

问题 #2

作为应用程序的一部分,它可以即时查看办公网络上的网络共享上的 PDF 和 Tiff 文档,如果之前未查看过该文档,它还会创建缩略图。如果在应用程序部署到的机器上运行,则此方法有效;但是,当从客户端 PC 浏览时,我收到一条错误消息:

拒绝访问路径 '\\fileserver\folder\file.tif' 说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.UnauthorizedAccessException:对路径“\\fileserver\folder\file.TIF”的访问被拒绝。

ASP.NET 无权访问请求的资源。考虑向 ASP.NET 请求标识授予对资源的访问权限。ASP.NET 有一个基本进程标识(通常是 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 上的网络服务),如果应用程序不模拟,则使用该标识。如果应用程序通过 模拟,则身份将是匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的请求用户。

由于这是在不同的服务器上,因此无法访问用户。为了解决这个问题,我尝试过:

1 - 将应用程序池设置为以域管理员身份运行(我知道这是一个安全风险,但我现在只是想让它工作!)

2-将万维网发布服务的登录帐户设置为域管理员。尝试重新启动服务时,我得到...

Windows 无法在本地计算机上启动万维网发布服务服务。

错误 1079:为此服务指定的帐户与在同一进程中运行的其他服务指定的帐户不同。

当我把头发拉出来时(我只剩下很少的东西),任何指示/帮助都会非常有用。


更新

我一直在使用我发现的这个时髦的小工具 - DelegConfig v2 beta (Delegation / Kerberos Configuration Tool)。这真的很有用。所以我已经可以访问文件共享(有一个可以读取文件的测试页面)所以现在我刚刚遇到了将用户凭据传递到 SQL Server 的问题(不是我的选择这样做!!)执行查询等,但我无法让它以用户身份登录。它尝试以没有 sql 登录名的“NT Authority\Network Service”身份访问它(登录用户也应该如此)。

我的连接字符串是:

<add name="User" connectionString="Data Source=.;Integrated Security=True" providerName="System.Data.SqlClient" />

没有指定初始目录,因为系统位于多个 dbs 上(也不是我的选择!!)。

到目前为止,我真的很感谢所有的帮助!:-)

还有什么提示吗?!

4

3 回答 3

1

问题 #2 - 您的选择是:

  • 配置委托(双跳认证)——我没有在 IIS7 上做过这个,它和 6 有点不同,但我相信你需要在 AD 中启用 Web 服务器机器帐户以进行委托,并为 Web 创建一个 SPN服务器(例如setspn -A http/<Web Server FQDN> <Domain>\<Machine Name>)。Kerberos 故障排除可能相当痛苦。
  • 向(域)应用程序池帐户授予对网络资源的访问权限,并确保打开匿名身份验证 ( <anonymousAuthentication enabled="true" userName="" defaultLogonDomain="" />)

对更新的回应:

您需要确保 Kerberos 身份验证适用于 SQL Server。运行查询select auth_scheme from sys.dm_exec_connections where session_id=@@spid;它将返回 NTLM 或 KERBEROS。如果是 NTLM,您需要做一些工作来配置 SQL Server 以使用 Kerberos。在 AD 中为 SQL 服务帐户设置 SPN:setspn -A MSSQLSvc/<SQL Server FQDN>:1433 <Domain>\<Sql Service Account>,重新启动 SQL Server 并再次尝试查询。您必须使用 TCP/IP 作为连接机制(这是默认设置)。

如果您没有初始目录,则需要确保所有用户登录都具有他们有权访问的默认数据库。我个人会选择一个数据库作为初始目录,因为根据登录的配置方式,您可能会获得不同的行为。

于 2010-06-11T08:03:23.553 回答
0

有了这一小部分信息,我只能给出一些提示:

问题 #1:也许你有一个误导性的 URL 作为表单的操作?还是一个捕获和忽略的异常?您的 global.asax.vb 中有 onError 事件吗?

Sub Application_Error()
    Dim ex As Exception = Server.GetLastError
    ' NOW HANDLE THE EXCEPTION --> REPORTING :-)
End Sub

问题 #2:我最近遇到了同样的异常 - 我必须检查此文件夹的用户的访问权限并将 appPool-identity 设置为“NETWORKSERVICE”。在您的情况下,您甚至尝试访问网络文件夹 - 检查服务器上的访问权限并尝试使用 IP 而不是名称 - 这可能是名称解析问题?!

抱歉这小部分信息...这看起来只能通过运行服务器上的直接调试选项解决的问题。

于 2010-06-11T08:02:14.003 回答
0

终于在周五的最后一件事我得到了它的工作......

正如我在更新中所说,用于整理凭据委派的工具非常方便,并且无止境地帮助设置正确的 SPN 记录。

我发现在将凭据传递到服务器时,我还必须为 SQL 设置它。我发现停止连接的另一件事是一些导致问题的入站 Windows 防火墙设置。

对于连接字符串;我必须更新为:

<add name="ConnectionStringName" connectionString="Data Source=.;Integrated Security=SSPI;Trusted_Connection=True" providerName="System.Data.SqlClient" />

我发现有用的链接:

Kerberos 身份验证和 SQL Server

委托配置

即使它主要谈论Sharepoint ......也很有用。

希望这对未来的人们有所帮助。

于 2010-06-14T11:05:28.247 回答