我最终想将asp.net WebApi部署到IIS 10。 该站点可以在localhost上正常运行,但是一旦我尝试执行与数据库相关的任何操作,就会收到内部服务器错误(500)。
我检查了连接字符串,这似乎是正确的。 我在SQL Server上为Domain \ MachineName $添加了一个用户。
我的连接字符串:
<add name="myDB" connectionString="data source=correctserver;initial catalog=correctdatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
失败的请求之一:
var request = new XMLHttpRequest()
request.open('GET', hostedserverurl + '/v1/correctapicall/' + correctrequestparameter, true)
错误在这里发生:
request.send()
预期结果:如果使用直接API调用,则与来自本地主机的JSON相同。 实际结果: 错误消息:(“ Fehler”是德语的“ Error”)
{"Message":"Fehler"}
我花了很多时间来完成这项工作,现在我已经完成了。但似乎更像是一堵墙... 我需要配置什么?我没有设置任何特殊设置。
编辑: 在webconfig的帮助下启用了更广泛的错误消息之后,我得以解决此内部异常:
"ExceptionMessage": "Die SELECT-Berechtigung wurde für das __MigrationHistory-Objekt, correctdatabase-Datenbank, dbo-Schema, verweigert.",
"ExceptionType": "System.Data.SqlClient.SqlException",
这使我相信这是与用户权限相关的事情...但是我已经为IIS创建了一个用户。
答案 0 :(得分:0)
每次复制生产数据库时,都会得到此信息,将其重命名为我的dev数据库,而忘记将我的dev用户添加到新的dev db中-这是EF尝试做的第一件事(当您执行任何数据库时)操作)是建立迁移历史表的存在/设置-如果正在使用的用户没有特权或不存在,则会发生类似错误
确保数据库中存在运行应用程序池的登录名/用户对。如果您的IIS应用程序池称为Wiggle,则需要在数据库内部为[IIS APPPOOL \ Wiggle]创建一个登录名/用户对,并确保该用户有权创建表,执行所有CRUD操作等
您可以在IIS管理器中查看您的站点正在使用哪个应用程序池;选择该站点,然后单击右上角的基本设置
ps;如果仍然无法解决问题,则应发布一些设置页面的屏幕快照,这些设置页面用于设置站点,站点的应用程序池(及其使用的本地身份)以及SQL Server用户。不要像我在这里一样使它们晦涩难懂,因为我们需要看到它们来检查它们的设置: