为什么我的WCF Web服务不能看到它自己的web.config Connectionstrings?

时间:2009-09-09 12:34:05

标签: c# wcf configuration asp.net-3.5

我编写了一个ASP.Net 3.5 WCF服务,当我创建这个项目时,VS给了我一个web.config文件。完成此操作后,应用程序现在似乎完全对连接字符串视而不见,这是一个很大的问题,因为应用程序将严重依赖于重新格式化并以各种Web友好格式吐出SQL Server数据库数据。

我见过的用于获取配置数据库连接的WCF服务的大多数引用都告诉您将连接字符串放在App.Config文件中,我很想避免这种情况...... VS2008也是如此,当我尝试时要添加新的app.config,直接配置文件不是第二个Web配置文件。

看到我已经有一个非常好的web.config文件,我宁愿我的数据访问代码也可以使用它。我想我可能错过了一些非常明显的东西但是:

ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString

不能像调试一样工作,配置管理器声称没有定义连接字符串,尽管事实上我在web.config文件中完全定义了七个连接字符串。我使用了System.Configuration,System.Web和System.Web.Configuration的语句。

似乎即使项目似乎被设计为引用web.config,事实上并非如此。它目前似乎也无法访问常规的app.config。

说完所有这些web.config中的所有httphandlers和端点似乎都没问题。如果我在调用datacontext时专门定义了连接字符串,那么它就能完美地工作。它特别是配置文件的connectionstring部分似乎有问题...

有什么想法吗?

编辑:

FWIW这是web.config的ConnectionStrings部分的(仅略微修改过的)内容。

<connectionStrings>
        <add name="D_CS" connectionString="[the_connection_string]" providerName="System.Data.SqlClient"/>
        <add name="PV_CS" connectionString="[the_connection_string]" providerName="System.Data.SqlClient"/>
        <add name="L_CS" connectionString="[the_connection_string]" providerName="System.Data.SqlClient"/>
        <add name="AL_CS" connectionString="[the_connection_string]" providerName="System.Data.SqlClient"/>
        <add name="APV_CS" connectionString="[the_connection_string]" providerName="System.Data.SqlClient"/>
        <add name="AD_CS" connectionString="[the_connection_string]" providerName="System.Data.SqlClient"/>
        <add name="TV_CS" connectionString="[the_connection_string]" providerName="System.Data.SqlClient"/>
    </connectionStrings>

就像我说的那样,该文件应该用于帮助执行其职责,它似乎没有问题或投诉。

进一步编辑:该应用程序目前仅处于开发阶段,因此尝试运行VSHOST时,它将通过IIS在Web上托管。

是的,我有一个对System.Configuration的显式项目引用

更新:为了尝试将其锁定,我已经将ConnectionString作为来自AppSetting的字符串传递,因为到目前为止我一直在使用

DataServiceContext dsc  = new DataServiceContext("connection string as string");

它也看不到AppSettings。

4 个答案:

答案 0 :(得分:2)

好的......这很有趣。

我想通过浏览器测试我的REST URI。只是为了看到输入浏览器的URI会返回正确的数据。

好吧,经过大量的讨论,我发现你需要一种代理WCF服务器才能做到这一点,只需要一个运行服务的小控制台应用就可以了。

事实证明,wcf使用的是 Proxy的配置,而不是IIS(或本例中为VSHOST)托管服务的web.config。因此,如果您使用对System.Configuration的引用进行操作,请在app.config中进行操作并将相关的连接字符串部分复制到其中,以便它完美运行。

多么刺激。

如果我认为它有任何相关性,它们可能会解决这个问题,它不应该......但是...... bah。

感谢您浪费时间寻求帮助。

答案 1 :(得分:1)

WCF旨在运行在不同类型的绑定(HTTP,TCP,消息队列,管道等......)上。经典的Web服务(asmx)始终通过HTTP运行。因此,默认情况下,您无法访问web.config文件。

如果您希望能够使用asp.net的HTTPContext,则需要将ASP.NET兼容模式设置为true,如下所示:

<system.serviceModel>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

</system.serviceModel>

请参阅this blog post以获取更详细的讨论。

答案 2 :(得分:0)

在网络服务器上,您必须使用WebConfigurationManager。除非使用默认的ConfigurationManager,否则我不知道。

答案 3 :(得分:-1)

尝试..

using System.Configuration;

System.Configuration.ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString