托管在本地IIS上的WCF服务应用程序和MVC4应用程序(不是express)抛出连接字符串错误
本文关键字:应用程序 express 不是 错误 字符串 连接 MVC4 IIS 服务 WCF 上的 | 更新日期: 2023-09-27 18:08:22
已经有一些问题,但似乎没有得到任何关注或答案是什么导致这个错误,以及如何修复它。
我已经创建了一个ASP。. NET MVC4应用程序,它在我使用VS2012中的WCF应用程序项目模板创建的另一个应用程序中具有单点数据访问。如果我在调试模式下运行这两个应用程序(因此此时两者都使用IIS express),它们可以很好地相互通信。我的电话都打得通,没问题。
我想在一个更现实的环境中测试它,所以我设置了我的IIS (IIS 8在windows 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.
没有内部异常供我查看,所以我在这里很困惑。
应该很明显这里的问题是什么。真的有很多问题:
是什么导致了这个问题?请记住,它在IIS express中工作得很好,只需在VS2012中调试即可。
这是我的MVC应用程序,WCF应用程序或IIS的配置问题吗?它们的组合?
我如何修复它??
有很多的代码文件和配置文件,我可以张贴在这里,但我想保持简短的阅读,如果有代码,你想在这里看到,让我知道如果评论,我可以张贴它。
我按照建议做了,并附加到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允许混合模式身份验证。现在我似乎可以毫无问题地使用服务了。万岁!
问题在于你的WCF应用程序,并且很可能是配置相关的。为了解决这个问题,我建议您将调试器附加到IIS中托管的WCF并调试GetUserRecord方法。
这里有一些关于如何调试托管在IIS中的WCF服务的提示
调试托管在本地IIS中的WCF服务不工作
调试IIS中托管的asp.net WCF服务
我怀疑的是你在连接字符串中使用windows认证,而拥有应用程序池的用户没有访问数据库的权限。如果您的调试显示是这种情况,我建议您将DB权限分配给apppool用户或更改连接字符串以使用SQL身份验证
现在,对于连接字符串错误,我建议您查看下面的博客文章。
http://failuresincoding.blogspot.com/2011/12/entity-framework-provider-did-not.html另外,您是否在本地机器上有多个SQL server ?我建议您使用完整的实例名,而不是"。"