WCF 和 IIS 的实体框架问题

Posted

技术标签:

【中文标题】WCF 和 IIS 的实体框架问题【英文标题】:Entity framework issue with WCF and IIS 【发布时间】:2011-03-18 04:16:19 【问题描述】:

我在一台机器上拥有 WCF 服务、MS SQL 数据库和 Visual Studio 2008 开发环境。 操作系统是带有 IIS 7 的 Windows Server 2008。 IIS 7 托管我的 WCF 服务,该服务使用 Microsoft Entity Framework 连接到数据库。目前,我正在使用 Microsoft 的 WCF 测试客户端程序测试 WCF 服务。

问题是当我在 WCF 方法中声明这样的实体时:

NewTestDBEntities db = new NewTestDBEntities();

如果我连接到托管在 IIS 上的 WCF 服务,WCF 服务客户端会显示错误。

这是来自 WCF 服务客户端的错误消息:

调用服务失败。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来恢复。

我知道这条线会引发错误,因为如果我拿走这条线,那么 WCF 调用就会完成。

我也试过通过运行调试器来测试WCF服务(WCF服务客户端是连接到ASP.NET开发服务器,不是IIS),这行代码

NewTestDBEntities db = new NewTestDBEntities();

运行没有错误。有谁知道为什么会这样?

非常感谢。

【问题讨论】:

【参考方案1】:

您的 WCF 服务托管在 IIS 中 - 但您是否也将 EF4 所需的连接字符串复制到相关的 web.config 中??

如果只是创建对象上下文(NewTestDBEntities)失败,通常是因为主机应用程序(此处:IIS)无法使用连接信息。

【讨论】:

@peter:您愿意分享一下您是如何解决这个问题的吗?其他人可能会从中受益 我有一个 ASP .NET 项目,与我的 WCF 服务项目在同一个解决方案中。 ASP .NET 项目基本上引用了 WCF 项目,所以我可以放到 IIS 上。因此,将有两个 .config 文件。我在 WCF 服务项目的配置文件中有连接字符串,但在 ASP .NET 项目中没有配置文件。这就是我遇到的问题。所以解决方法是将连接字符串复制到 ASP .NET 项目中的配置文件中。就是这样!

以上是关于WCF 和 IIS 的实体框架问题的主要内容,如果未能解决你的问题,请参考以下文章

WCF 数据服务或实体框架

无法从 IIS 访问我的 WCF [关闭]

Wcf 服务器和实体框架问题

WCF 和实体框架 4.1 POCO

将 WCF 服务与实体框架 4 和...DTO 一起使用?

使用 WCF 和实体框架的客户端服务器