3

那里已经有一些问题,但似乎没有人得到任何关注或回答导致此错误的原因以及如何解决它。

背景

我创建了一个 ASP.NET MVC4 应用程序,该应用程序在我使用 VS2012 中的 WCF 应用程序项目模板创建的另一个应用程序中具有单点数据访问。如果我在调试模式下运行这两个应用程序(因此此时两者都使用 IIS express),它们可以很好地相互通信。我所有的电话都有效,没有问题。

我想在更真实的环境中对其进行测试,所以我设置了我的 IIS(Windows 8 机器上的 IIS 8),创建了一个网站,在该网站下我托管了这两个应用程序,我正在调用的 MVC 应用程序仪表板,以及我称为服务的 WCF 仪表板。所以它在 IIS 中看起来像这样

 MYMACHINENAME
 |
 --App Pools
 |Sites
     --local
        --aspnet_client
        --dashboard (application, MVC4)
        --service (application, WCF)

我可以点击 localhost/service 并在那里看到正确的信息,所以我知道它托管正确。

我更新了 MVC4 项目中的服务引用以指向 localhost/service 而不是我正在使用的 iis express。

问题

将新服务引用添加到 MVC4 应用程序工作正常,我得到了 wsdl 信息,我可以看到我定义的所有端点调用。添加新的服务参考后,我重新发布了“仪表板”应用程序。当我导航到 localhost/dashboard 时,我在服务引用创建的 Reference.cs 文件深处收到一个错误。这是引发错误的代码:

MyServiceAPIClient svc = new MyServiceAPIClient();
svc.Open();
User userRecord = svc.GetUserRecord(adSAMName);

在第三行,它进入了我添加服务引用时创建的 Reference.cs 文件。它在 Reference.cs 文件中终止的这行代码在这里:

public Dashboard.Web.MyApiService.User GetUserRecord(string userName) {
    return base.Channel.GetUserRecord(userName);
}

错误信息是这样的:

An error occurred while getting provider information from the database. 
This can be caused by Entity Framework using an incorrect connection string. 
Check the inner exceptions for details and ensure that the connection string is correct.

我没有内在的例外,所以我在这里不知所措。

问题

应该很明显这里的问题是什么。确实有多个问题:

  1. 什么可能导致此问题?请记住,它在 IIS express 中运行良好,只需在 VS2012 中进行调试。

  2. 这是我的 MVC 应用程序、WCF 应用程序或 IIS 的配置问题吗?它们的组合?

  3. 我如何解决它??

我可以在这里发布很多代码文件和配置文件,但为了阅读起见,我想让它更短一些,如果您想在这里看到代码,请告诉我评论是否可以发布。

更新

我按照建议做了并附加到在 IIS 中运行服务的进程。深入研究内部异常似乎是尝试访问数据库的访问/登录问题。

不过,我似乎无法让连接字符串与内置 SQL 用户一起使用,所以我又摸不着头脑了。

这是我正在尝试的连接字符串:

<add name="MyDB" connectionString="Server:.;Database=MyDatabase;User Id=SQLAuthUser;Password=yourmom;"  providerName="System.Data.SqlClient"/>

我再次运行该过程,它告诉我指定的用户登录失败,并且我还收到了我以前从未见过的消息:

Could not determine storage version; a valid storage connection or a version hint is required. 

哈!?

更新:解决方案

所以我的连接字符串现在是这样的:

<add name="NeumontDB" connectionString="Server=ServerName; Database=NeumontDB; User Id=Username; Password=password;"  providerName="System.Data.SqlClient"/>

而且我还需要设置 sql server 以允许混合模式身份验证。现在我似乎可以毫无问题地使用服务了.. 万岁!

4

1 回答 1

1

问题出在您的 WCF 应用程序中,并且很可能与配置有关。要解决此问题,我建议您将调试器附加到托管在 IIS 中的 WCF 并调试 GetUserRecord 方法。

以下是有关如何调试 IIS 中托管的 WCF 服务的一些提示

调试本地 IIS 中托管的 WCF 服务不起作用

调试 IIS 中托管的 asp.net WCF 服务

我怀疑您在连接字符串中使用了 Windows 身份验证,而拥有应用程序池的用户无权访问数据库。如果您的调试显示是这种情况,我建议您将数据库权限分配给 apppool 用户或更改连接字符串以使用 SQL 身份验证

现在对于连接字符串错误,我建议您阅读以下博客条目。

http://failuresincoding.blogspot.com/2011/12/entity-framework-provider-did-not.html

另外,您在本地机器上有多个 SQL Server 吗?我建议您使用完整的实例名称而不是“。”

于 2013-04-10T13:17:13.327 回答