我已经创建了一个WCF服务,基本上它与我的数据库进行了一些交互。 该服务位于一个项目中,它从我在另一个项目中创建的库中调用函数。 在我的库中,我将调用WCFSerivceLibrary,我也有一个app.config,我想在AppSettings部分中提取一些存储的值。
问题在于,当我从某个客户端调用我的WCF服务,并且正在WCFServiceLibrary中执行某个函数时,每当我调用AppSettings时,它都会检查配置 致电客户的文件!
进一步说明: 假设我们有一个Windows窗体应用程序,它以这种方式调用我的WCF服务:
MyWCFService.DoWork();
在我的WCF服务中的DoWork函数中,我有以下代码:
Type DoWork ()
{
//MyWCFServiceLibrary is a library in the same solution of the WCF Service.
MyWCFServiceLibrary.DoWorkOne();
MyWCFServiceLibrary.DoWorkTwo();
}
在函数DoWorkOne
或DoWorkTwo
中...我正在调用AppSettings来获取存储在MyWCFServiceLibrary项目的app.config中的一些值,而是在执行时从AppSettings加载我的Windows窗体客户端的app.cofing调用WCF服务。
答案 0 :(得分:1)
我正在写下我对复制配置的意义。但我认为这不是问题所在。问题可能是您甚至没有进行WCF通信。我怀疑你在服务项目和客户端项目中都包含了DLL,你可以从客户端调用类的方法。
您需要进行WCF通信才能运行WCF服务(例如,使用端点创建ServiceHost
的EXE)。然后在客户端中,使用Visual Studio的“添加服务引用”菜单项添加服务引用。
不需要在客户端中包含DLL,因为将自动生成类以通过WCF访问服务。
现在正确使用应用程序设置:
将DLL的app.config
文件的应用程序设置复制到使用DLL的可执行项目的app.config
文件中。例如,这可能如下所示:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Executable.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="DLL.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Executable.Properties.Settings>
<setting name="Test" serializeAs="String">
<value>Testvalue EXE</value>
</setting>
</Executable.Properties.Settings>
<DLL.Properties.Settings>
<setting name="Test" serializeAs="String">
<value>Testvalue DLL</value>
</setting>
</DLL.Properties.Settings>
</applicationSettings>
</configuration>
执行此操作后,应用程序可以通过Properties.Settings.Default.Test
(返回Testvalue EXE
)访问其设置,DLL可以通过Properties.Settings.Default.Test
访问其设置(返回Testvalue DLL
)
我不明白为什么人们需要使用像ConfigurationManager
这样的东西才真正那么简单......