实体框架“底层提供程序在Open上失败” - Cassini vs IIS

时间:2011-05-03 09:09:47

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

我有一个使用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)下运行时,连接失败,并出现以下异常:

  

底层提供商在Open

上失败

有一个内部异常告诉我:

  

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

我知道Cassini在我的登录帐户下运行,并且IIS在IUSR_MYMACHINE帐户下运行,但我的连接不受信任,因此不应该重要......

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

谢谢,
标记

3 个答案:

答案 0 :(得分:3)

我们在这个场合的决议是强制连接使用tcp(在连接字符串中使用data source=tcp:MyServer)并在SQL框上启用TCP(oops!)..

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

标记

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

此解决方案适用于在部署 windows应用程序

时遇到此问题的人

我知道这很晚了,但是这可能对将来的某个人有用。在我的场景中,这纯粹是一个连接字符串问题,我使用实体框架(DB First方法)开发了一个Windows应用程序,并发布了该代码,在我的计算机上工作正常,但在客户端计算机上却不工作

此问题的原因:-

我更新了App.config文件中的客户端计算机连接字符串,但这是错误的,如果是Windows应用程序,则它将不读取来自App.config的连接字符串(对于已部署计算机),它将从.exe.config文件读取,

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