2

我创建了一个 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 是从调用 WCF 服务的 Windows 窗体客户端的 app.cofing 加载的.

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

1 回答 1

1

我在下面写下我关于复制配置的意思。但我不认为这是问题所在。问题可能是您甚至没有进行 WCF 通信。我怀疑您在服务项目和客户端项目中都包含了 DLL,并且您很简单地从客户端调用类上的方法。

做 WCF 通信,您需要让 WCF 服务运行(例如,创建ServiceHost带有端点的 EXE)。然后在客户端中,使用 Visual Studio 的“添加服务引用”菜单项添加服务引用。

无需在客户端中包含 DLL,因为将自动生成类以通过 WCF 访问服务。

现在正确使用应用程序设置:

app.config将 DLL文件的应用程序设置复制到使用 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)访问其设置。

I don't understand why people need to use things like ConfigurationManager when it is actually that simple...

于 2012-11-20T09:43:25.593 回答