WCF配置文件

时间:2012-11-20 08:41:25

标签: c# wcf app-config

我已经创建了一个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();
}

在函数DoWorkOneDoWorkTwo中...我正在调用AppSettings来获取存储在MyWCFServiceLibrary项目的app.config中的一些值,而是在执行时从AppSettings加载我的Windows窗体客户端的app.cofing调用WCF服务。

  1. 如何避免上述问题?
  2. 我的WCF服务和服务库可以有一个配置文件吗?
  3. 如何在两者之间分享?

1 个答案:

答案 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这样的东西才真正那么简单......