我编写了一个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。
答案 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