我有一个 ASP.Net MVC 3 应用程序。我已经为它创建了一个设置并安装在我的网络服务器上。
当我从 Web 浏览器访问应用程序时"http://localhost/myapp"
,它可以工作。
但是当我从另一台机器上尝试时,就像"http://mywebserver/myapp"
它给出了一个错误:
传入字典的模型项的类型为“System.Web.Mvc.HandleErrorInfo”,但此字典需要 myapp.Models.ErrorModel 类型的模型项。
我有一个 ASP.Net MVC 3 应用程序。我已经为它创建了一个设置并安装在我的网络服务器上。
当我从 Web 浏览器访问应用程序时"http://localhost/myapp"
,它可以工作。
但是当我从另一台机器上尝试时,就像"http://mywebserver/myapp"
它给出了一个错误:
传入字典的模型项的类型为“System.Web.Mvc.HandleErrorInfo”,但此字典需要 myapp.Models.ErrorModel 类型的模型项。
这可能是新服务器上的权限问题等
解决方案1:在现有的连接字符串中删除“user Instance=true”,它就可以工作了。
问题的可能原因如下: 用户实例无法附加数据库,因为用户没有所需的权限。用户实例在打开连接的用户的上下文中执行,而不是普通的 SQL Server 服务帐户。打开用户实例连接的用户必须对连接字符串的 AttachDbFilename 选项中指定的 .mdf 和 .ldf 文件具有写入权限。
另一个常见问题是当数据库附加到 SQL Server Express 实例时成功打开数据库文件,但在尝试从 Visual Studio IDE 打开时失败。这可能是因为 SQL Server Express 实例以“NT AUTHORITY\NETWORK SERVICE”运行,而 IDE 以 Windows 帐户运行。因此,权限可能不起作用。
此问题的一个变体是当打开用户实例连接的用户对数据库文件具有读取权限但没有写入权限时。如果您收到一条消息说数据库以只读方式打开,则需要更改数据库文件的权限。
用户实例的另一个主要问题是因为 SQL Server 以独占访问权限打开数据库文件。这是必要的,因为 SQL Server 在其内存中管理数据库数据的锁定。因此,如果多个 SQL Server 实例打开同一个文件,则可能会损坏数据。如果两个不同的用户实例使用同一个数据库文件,一个实例必须先关闭该文件,另一个实例才能打开它。关闭数据库文件有两种常用方法,如下所示。
用户实例数据库设置了自动关闭选项,因此如果 8-10 分钟没有与数据库的连接,数据库将关闭并关闭文件。这会自动发生,但可能需要一段时间,尤其是在为您的连接启用连接池的情况下。
通过调用 sp_detach_db 从实例中分离数据库将关闭文件。这是 Visual Studio 用来确保在 IDE 在用户实例之间切换时关闭数据库文件的方法。例如,您正在使用 IDE 设计启用数据的网页。您按 F5 运行应用程序。IDE 分离数据库,以便 ASP.NET 可以打开数据库文件。如果您将数据库连接到 IDE 并尝试从浏览器运行 ASP 页面,ASP.NET 将无法打开数据库,因为 IDE 仍在使用该文件。