Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架登录失败错误_.net_Wcf_Entity Framework - Fatal编程技术网

.net 实体框架登录失败错误

.net 实体框架登录失败错误,.net,wcf,entity-framework,.net,Wcf,Entity Framework,我在IIS中托管了我的WCF应用程序,并设置了一个集成了4.0的应用程序池。我将池标识配置为网络服务。我已经检查了与此问题相关的其他帖子,但无法解决它 我得到以下例外 System.Data.Entity.Core.EntityException was unhandled by user code HResult=-2146233087 Message=The underlying provider failed on Open. Source=EntityFramework 我

我在IIS中托管了我的WCF应用程序,并设置了一个集成了4.0的应用程序池。我将池标识配置为网络服务。我已经检查了与此问题相关的其他帖子,但无法解决它

我得到以下例外

System.Data.Entity.Core.EntityException was unhandled by user code


HResult=-2146233087
  Message=The underlying provider failed on Open.
  Source=EntityFramework
我试着将应用程序池从网络服务修改为localsystem,效果很好。
猜猜为什么在前面的案例中使用我的系统名作为登录名?

问题与实体框架无关。无法连接到SQL Server。我会检查这些东西:

  • 确保SQL Server已启动并正在运行。检查您正在运行的服务,查看是否已启动

  • 我将检查以查看TCP/IP通信是否已启用

  • 我会检查我的防火墙设置。也许SQL Server和客户端之间存在某种障碍

  • 我会检查来自同一客户机的另一个应用程序是否可以连接到同一服务器。然后我将检查连接字符串的差异

  • 如果以上所有操作都正确,那么我将检查特定SQL Server、特定数据库上的权限,以及我尝试连接的帐户的权限。允许所有人使用此数据库作为检查是否存在帐户权限问题的第一步使用此特定配置(
    Integrated Security=true
    )意味着您的用户名和密码将被忽略。
    如果要使用特定用户名和密码访问SQL server,则应忽略连接字符串中的特定语句,或将其设置为false

你可以查一下


希望我能帮忙

在连接字符串中,您已将集成安全设置为“true”。这很可能导致忽略用户名和密码。运行应用程序池的标识将用于尝试登录

解决此问题的两种方法:

  • 将集成安全设置为“false”

  • 使用帐户(连接字符串中的帐户或创建的帐户)运行应用程序池,并将集成安全设置保留为“true”。要使其工作,运行应用程序池的帐户将需要对SQL server实例的登录权限(加上任何其他权限,如执行或选择,如果需要)


  • 我们使用EF和good plain old ADO.NET来实现这一点。我们创建用于运行应用程序池的服务帐户,并授予该服务帐户必要的登录和其他权限。您还必须启用SQL Server以接受Windows身份验证。

    这是一个愚蠢的错误!!我的SQL server登录中没有
    NT AUTHORITY\NETWORK SERVICE
    帐户。我已经添加了所需的权限。它现在可以与我的应用程序池配置一起工作,在连接字符串中设置为
    网络服务
    集成安全=true

    您的连接字符串中已将集成安全设置为true,这可能优先于用户名和密码。尝试在您的凭据下运行应用程序池(或者更好的做法是,创建一个登录到SQL server的服务帐户,并在该服务帐户下运行应用程序池,集成安全设置为true)。另一个选项是将integrated security设置为false。这些都是需要检查的好东西,但在这种情况下,我认为运行应用程序池的帐户没有足够的权限登录SQL Server。注意连接字符串中的integratedsecurity=True和错误消息:
    message=Login用户'MS\LH7U0CNU3369CKR$'失败。
    Yes,只要我保持integratedsecurity=True,应用程序池标识为Localsystem,应用程序就可以工作。当我将应用程序池标识更改为网络服务时,会出现登录失败错误(无论是启用集成安全性还是在连接字符串中提供域用户凭据)。如果我在什么地方做错了,请告诉我网络服务的配置。我还为sql server登录中的用户id(我的windows登录id)提供了管理员权限。您应该为特定数据库上的特定帐户提供权限。不在整个SQL Server上。我希望现在清楚了。我在研究方法时粘贴了连接字符串。实际上,我删除了(并设置为false)集成安全性。我已经在SQL Server登录中添加了此用户,并通过windows身份验证提供管理员访问权限。在连接字符串中,我提供了user id=domain\username;password=ntpassword。但是,随后我开始收到错误,用户域\用户名登录失败。当我在应用程序池中添加自定义标识并在浏览器中打开svc文件时,我收到一条消息“服务不可用”。连接DB的唯一方法是将标识标记为LocalSystem,并提供integratedsecurity=true;正在从连接字符串中删除用户id和密码。