【问题标题】:Entity Framework "The underlying provider failed on Open" - Cassini vs IIS实体框架“底层提供程序在打开时失败”-Cassini 与 IIS
【发布时间】:2020-12-18 00:25:32
【问题描述】:

我有一个使用 EF 从 SQL 数据库中检索数据的服务。

EF 模型位于类库中。在类库中连接配置为:

      <add name="APIC2CEntities"
     connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MYSERVER;initial catalog=MYDB;user id=MYUSER;password=THEPASSWORD;multipleactiveresultsets=True;App=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

该类库被 WCF 服务项目引用。在 webconfig 中,我通过以下方式控制 EF 连接:

      <add name="APIC2CEntities"
     connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MYSERVER;initial catalog=MYDB;user id=MYUSER;password=THEPASSWORD;multipleactiveresultsets=True;App=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

当我的服务在 Cassini 中运行时,数据被正确检索。当服务在 IIS (Windows XP) 下运行时,连接失败并出现以下异常:

底层提供者在打开时失败

有一个内部异常告诉我:

{“在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问该服务器。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)"}

我知道 Cassini 在我的登录帐户下运行,而 IIS 在 IUSR_MYMACHINE 帐户下运行,但我的连接不受信任,所以这应该无关紧要... p>

如何在 IIS 和 Cassini 之间以不同方式操作或控制 EF 连接?

谢谢,
标记

【问题讨论】:

  • 这个问题似乎与 EF 无关...你能直接打开与 ADO.NET 的连接吗?
  • 所有重要的是进程身份和您用于连接的凭据 - 除了身份之外,Cassini 或 IIS 是否正在执行没有区别

标签: entity-framework iis entity-framework-4 cassini


【解决方案1】:

我们这次的解决方案是强制连接使用 tcp(在连接字符串中使用 data source=tcp:MyServer)并在 SQL 框上启用 TCP(哎呀!)..

我仍然不知道 Cassini 会话如何能够在没有 IIS 会话的地方建立连接:-S

标记

【讨论】:

    【解决方案2】:

    我认为问题仍然存在于连接字符串中。如果您确定请执行以下步骤并进行测试

    1. 打开空白记事本并保存为 connectionString.UDL
    2. 打开 connectionString(刚刚在步骤 1 中保存)
    3. 在连接选项卡下:键入服务器名称(在我的情况下:DESKTOP-IDSLV81)或 IP 作为 XXX.XXX.XXX.XXX,1433 其中 1433 是默认端口,使用相应的用户名和密码并选择数据库(可用 DB位于下拉列表中)
    4. 然后按测试连接如果成功按确定按钮。
    5. 在记事本中打开 connectionString.UDL 文件。正确的连接字符串在那里,并与 web.config 中的连接字符串进行比较

    【讨论】:

      【解决方案3】:

      此解决方案适用于在部署 Windows 应用程序时遇到此问题的人,

      我知道这已经晚了,但这可能对将来的某个人有用,在我的场景中,这纯粹是一个连接字符串问题我使用实体框架(DB First 方法)开发了一个 Windows 应用程序并发布了它,代码是在我的机器上运行良好,但在客户端机器上却不行

      出现此问题的原因:-

      我在 App.config 文件中更新了客户端机器连接字符串,但这是错误的,如果那是一个 windows 应用程序,那么它将 不读取 App.config 中的连接字符串(对于已部署机器),它将从 .exe.config 文件中读取,

      所以部署后,我们需要更改“AppicationName”.exe.config文件中的连接字符串

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多