WCF服务应用程序和MVC4应用程序托管在本地IIS(不表达)投掷连接字符串错误

时间:2013-04-10 13:02:21

标签: c# asp.net-mvc wcf entity-framework iis

已经有一些问题,但似乎没有人对引起此错误的原因及如何修复它有任何关注或答案。

背景

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

我想在更现实的环境中测试它,所以我设置了IIS(Windows 8盒子上的IIS 8),创建了一个网站,在该网站下面我托管这些应用程序,MVC一个,我正在调用Dashboard和WCF,我称之为Service。所以它在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. 如何解决?

  4. 我可以在这里发布很多代码文件和配置文件,但是为了阅读起见我想保持简短,如果有你想在这里看到的代码,请告诉我是否有评论和我可以发布它。

    更新

    我按照建议做了并附加到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. 
    

    HALP!?

    更新:解决方案

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

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

    我还需要设置sql server以允许混合模式身份验证。现在我似乎能够毫无问题地点击服务。万岁!

1 个答案:

答案 0 :(得分:1)

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

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

Debug WCF service hosted in local IIS not working

debugging asp.net WCF service hosted in IIS

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

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

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

另外,本地盒子上有多个SQL Server吗?我建议您使用完整的实例名称而不是&#34;。&#34;