我有一个使用EF从SQL数据库中检索数据的服务。
EF模型位于类库中。在类库中,连接配置为:
<add name="APIC2CEntities"
connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MYSERVER;initial catalog=MYDB;user id=MYUSER;password=THEPASSWORD;multipleactiveresultsets=True;App=EntityFramework""
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="data source=MYSERVER;initial catalog=MYDB;user id=MYUSER;password=THEPASSWORD;multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
当我的服务在Cassini中运行时,数据被正确检索。当服务在IIS(Windows XP)下运行时,连接失败,并出现以下异常:
底层提供商在Open
上失败
有一个内部异常告诉我:
{“与SQL Server建立连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名称是否正确以及SQL Server是否已配置为允许远程连接。(提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)“}
我知道Cassini在我的登录帐户下运行,并且IIS在IUSR_MYMACHINE帐户下运行,但我的连接不受信任,因此不应该重要......
在IIS和Cassini之间,如何以不同的方式操纵或控制EF连接?
谢谢,
标记
答案 0 :(得分:3)
我们在这个场合的决议是强制连接使用tcp(在连接字符串中使用data source=tcp:MyServer
)并在SQL框上启用TCP(oops!)..
我仍然不知道Cassini会话如何能够建立IIS会话所在的连接:-S
标记
答案 1 :(得分:0)
我认为问题仍然存在于连接字符串中。如果您确定,请执行以下步骤并进行测试
答案 2 :(得分:0)
此解决方案适用于在部署 windows应用程序
时遇到此问题的人我知道这很晚了,但是这可能对将来的某个人有用。在我的场景中,这纯粹是一个连接字符串问题,我使用实体框架(DB First方法)开发了一个Windows应用程序,并发布了该代码,在我的计算机上工作正常,但在客户端计算机上却不工作
此问题的原因:-
我更新了App.config文件中的客户端计算机连接字符串,但这是错误的,如果是Windows应用程序,则它将不读取来自App.config的连接字符串(对于已部署计算机),它将从.exe.config文件读取,
因此,部署后,我们需要在“ AppicationName” .exe.config文件中更改连接字符串