IIS出现"System.Data.SqlClient.SqlException"时的解决办法

2022-05-05 19:18:02 浏览数 (1)

问题出现

最近正在学习ASP.NET Core MVC,顺便弄了一个自己的个人小网站。基本上是开发一点,部署一点。不过,当我添加了Entity Framework之后,部署到IIS上却打不开了。页面提示一个500服务器错误就什么也没了。

:( Oops. 500 Internal Server Error

初步查询

我在VS中调试的时候明明好好的,于是我翻看了一下ASP.NET Core关于在IIS上部署的文档,上面提供了一个简单的检测错误来源的方法:

1.如果在你的发布文件夹内使用dotnet yourapp.dll等命令运行程序可以正常运行的话,说明问题更可能出在IIS和Kestrel服务器的通信之间,你的应用程序本身应该是没问题的。2.如果通过IIS可以正常浏览静态内容(比如图片,CSS或者JS),但是浏览页面却出现错误的话,说明问题更可能出现在你的应用程序上。

我照着使用dotnet myapp.dll命令测试了一下,发现我的程序没问题,那么问题看来就是出在IIS上面了。但是由于IIS只给出了一个500错误,没有更详细的日志,所以我暂时没有办法。

检查日志

于是我到了著名的程序员问答社区StackOverFlow上面提了个问题。其中一位大侠给了我思路。那就是打开日志追踪。找到发布文件夹中的Web.config文件,打开日志追踪stdoutLogEnabled="true",由于IIS本身不会自动创建日志文件夹,所以还需要根据stdoutLogFile=".logsstdout"来创建logs文件夹,来让IIS将日志记录到这里。修改完成之后需要在IIS中重启我的程序,然后再浏览器中访问,果然出现了迫切需要的程序日志。

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. 无法创建自动实例。有关错误详细信息,请参阅 Windows 应用程序事件日志。 )

有了日志,事情就好办多了。在这里我不得不插一句,在这个时候VS提醒我ASP.NET Core插件更新了,于是我就点了更新。不过更新失败了两次,我又看了一下更新日志发现是网络问题。于是又挂上了ss才成功更新。更新之后呢,我突然发现再次发布之后,IIS居然直接提示出了我历经千辛万苦才找到的错误信息!在此我只能说以后再遇到更新,我就果断更新,没有任何犹豫了。

问题解决

刚才说了一些题外话。根据错误异常信息来看,这是SqlServer权限不够造成的。联想我开发时候正常,部署到IIS上却不正常了。说明还是IIS有哪里权限不够。上网在查了一下果然发现是这个原因。解决办法也很简单:打开IIS中的应用程序池,找到我的程序实用的应用程序池,打开高级设置,找到进程模型->标识,然后修改为LocalSystem即可。

修改之后,我迫不及待的查看我的网站,这次果然正常了。

0 人点赞