【问题标题】:WCF Service ProblemsWCF 服务问题
【发布时间】:2014-11-17 21:05:59
【问题描述】:

我在将 WCF 服务设置到 IIS 服务器时遇到问题。我当前的设置是一个用 C# 编写的 WCF 服务,它访问一个外部数据库(位于不同的服务器上,与我们的 IIS 服务器不同的位置)和一个使用我们服务器上的服务并使用它的方法的 ASP.NET 网站查询,然后显示一些数据。

在我将服务和网站上传到我们的服务器之前,我使用 Visual Studio 完成的默认设置对其进行了测试。这个测试带来了可喜的结果,因为当我让 Visual Studio 托管服务(以及它为设置测试环境所做的任何其他事情)并在网站上使用它时,一切都很顺利,我的所有查询都完美地完成了.

我可以很好地上传服务,在网站上使用它,但是当我的服务对外部数据库进行查询时出现问题。进行实际查询时,我收到“基础提供程序在打开时失败”错误。我尝试了一些不同的方法,但找不到答案。出于法律原因,我不允许上传代码,但我认为这个问题是由于服务器上的设置不正确造成的。

【问题讨论】:

  • 您使用的是什么数据库?既然你提到实体框架,它是 SQL-Server 吗?如果是这样,您是否使用 Windows 身份验证来形成您的连接字符串?
  • 是的,它是一个 SQL Server。我相信我们正在使用 Windows 身份验证,我只知道我们正在使用实体框架,以及用于访问数据库的 id 和登录名。我不太确定,连接字符串是在此应用程序分配给我之前设置的。谢谢您的帮助!我希望这些信息有助于缩小范围
  • 打开 WCF 日志记录并使用服务跟踪查看器工具检查日志。 msdn.microsoft.com/en-us/library/ms751526(v=vs.110).aspx 任何底层 WCF 异常都应出现在跟踪日志中。
  • 我的建议是看看 IIS 中的应用程序池。

标签: c# sql database entity-framework wcf


【解决方案1】:

假设您使用的是实体框架,该问题几乎总是表明建立与您的数据库的连接存在问题。检查您的连接字符串并确保服务器和实例名称正确,并且运行您的服务的用户有权访问数据库。如果您在 IIS 中托管,这通常是服务帐户(例如 NETWORK SERVICE)或本地系统帐户。

【讨论】:

  • 这是我一直试图弄清楚的。让我感到奇怪的是,当我使用默认的 localhost 设置连接时它可以工作,但是当我将它推送到 IIS 服务器时,我得到了这些错误。 IIS 是否可能没有使用连接字符串中的凭据?我不确定 IIS 和数据库访问之间发生了什么。
  • 当您在本地连接时,该服务在您的帐户下运行,而当您在 IIS 中托管它时,它在服务帐户下运行。找出它在哪个服务帐户下运行,并授予该帐户对数据库的权限。
  • 非常感谢!我会仔细检查一下,看看我们的设置是什么样的。网络帐户是否与应用程序池相关?我一直在阅读这方面的内容,并且在某处读到应用程序池决定使用哪个帐户。
【解决方案2】:

问题最终是连接字符串。在我的本地机器上,服务器的名称是用 Hosts 文件解析的,但是服务器无处可解析连接字符串中提到的服务器的名称。这导致了这个问题。这已通过更新服务器主机文件解决。

【讨论】:

    【解决方案3】:

    我在新安装 SQL Server 时遇到了这个错误,我通过在 SQL Server 配置管理器中启用命名管道来修复它。可能与您遇到的问题相同。

    【讨论】:

    • 问题是我在访问的服务器上没有管理员权限。我只有一个简单的用户帐户,可以从中读取。不过谢谢,我可能需要就服务器上的权限与某人联系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多