none
wcf挂载到iis上后访问数据库失败,该怎么配置? RRS feed

  • 问题

  • 我在vs2012里创建了一个wcf服务应用程序,这个wcf服务是需要数据库操作的,我在vs里面就是wcf项目下的APP_data文件夹里面创建了一个数据库,然后我写完后在vs的自带调试工具下可以执行并且成功访问数据库并带回数据,然后我再IIS下那个defaultwebsite下添加虚拟目录挂了我wcf在的那个目录,然后把它转换成应用程序,我用浏览器去浏览也挂载成功。但是我在我的一个wp应用中想去调用那个wcf服务测试时传出一个错误如下:

    +  $exception {System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL Network Interfaces, error: 50 - 发生了本地数据库运行时错误。无法创建自动实例。有关错误详细信息,请参阅 Windows 应用程序事件日志。
    ) (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
    System.Data.SqlClient.SqlException: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL Network Interfaces, error: 50 - 发生了本地数据库运行时错误。无法创建自动实例。有关错误详细信息,请参阅 Windows 应用程序事件日志。
    )
       在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
       在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
       在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
       在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(Db...).} System.Exception {System.ServiceModel.FaultException<System.ServiceModel.ExceptionDetail>}

    这个应该是里面的数据库访问不成功所致,但是我不清楚要怎样配置才行,请教下如何配置?还有为何vs调试时可以执行成功,wp调用时就不行了?

    2013年10月22日 4:19

全部回复

  • 对了忘记说了,我的wcf访问数据库的方式是用using System.Data.SqlClient命名空间里的sqlconnection访问的,连接字符串放在那个wcf项目的webconfig文件里面,字符串是这个connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\ChatService\ChatService\App_Data\MyChatRomDB.mdf;Integrated Security=True",数据库我用的是vs自带的那个,本身我的机子没装过数据库只装了vs的。
    2013年10月22日 4:24
  • 求个高手解答,不胜感激。。。

    2013年10月22日 6:13
  • 你应该在connection string中使用attach方式加载并连接数据库的吧。这个需要sql server express才工作。

    安装Visual Studio默认会安装相应版本的sql server express. 

    2013年10月23日 1:19
  • 如果mdf实在app_data中的话,可以用这个方式的链接字符串

    Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|Customers.mdf;Integrated Security=True;User Instance=True

    lz可以看看这篇文章:

    Using SQL Server Express with ASP.NET

    http://msdn.microsoft.com/en-us/library/ms247257(v=vs.100).aspx

    2013年10月23日 1:25
  • 这是数据库链接的问题。。。不是WCF的问题。你服务器上数据库怎么安装的。。。链接字符串对吗

    Frank Xu Lei--谦卑若愚,好学若饥
    [老徐的网站]:http://www.frankxulei.com/

    [老徐的博客]:http://54peixun.com/Author/frankxulei
    微软WCF中文技术论坛
    微软WCF英文技术论坛

    微软WCF技术群:166599314

    2013年10月23日 10:11
    版主
  • 那个我试了下还是不行啊,用Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|Customers.mdf;Integrated Security=True;这个作为连接字符串直接出错了连vs运行的时候都不行,改成老的那个connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\ChatService\ChatService\App_Data\MyChatRomDB.mdf;Integrated Security=True"至少在vs调试的时候可以访问到,我在想是不是我localdb的数据库服务没开的原因?,,是的话怎么打开服务?对vs自带安装的localdb不熟悉啊,,求解/。。

    2013年10月29日 9:04
  • 你要理解下链接字符串的意义。

    Source是sql server实例,由机器名和实例名组成。Source=.\SQLEXPRESS; 意思是本机(.),实例名为SQLEXPRESS.

    AttachDbFileName是数据库文件的位置。AttachDbFileName=|DataDirectory|Customers.mdf的意思是在网站的app_data目录下的Customers.mdf文件。不需要想你的connection string使用绝对路径,部署还要修改mdf的路径

    你都要替换成你自己环境的数据。

    Integrated Security=True是使用当前用户登录数据库,这里也会有问题,因为IIS下asp.net运行在NETWORK SERVICE(IIS6)用户或者其它用户(IIS5 是ASPNET, IIS7是新创建的用户,可以在application pool的属性中看).这些用户没有对sql server 数据的访问权限,你最好使用sql authentication. 


    查看服务器sql server是否运行可以通过:

    Start -> all programs ->Microsoft SQL Server 2008(或者其它版本) ->Configuration Tools ->SQL Server Configuration Manager

    左边选择Sql server services,能看到所有运行的service,sqlserver服务还可以看到实例名。

    2013年11月3日 23:00