2012-11-20 74 views
2

我创建了一个WCF服务,基本上与我的数据库的一些互动。 服务在一个项目中,它从另一个项目中创建的库中调用函数。 在我的库中,我将调用WCFSerivceLibrary我也有一个app.config,我想在AppSettings部分中提取一些存储的值。WCF配置文件

的问题是,当我打电话给我的WCF服务从某一个客户端,一个功能是在WCFServiceLibrary执行,每当我打电话的AppSettings它检查配置 文件为调用客户端

进一步说明: 让我们说我们有一个Windows窗体应用程序,调用我的WCF服务是这样的:在我的WCF服务的功能DoWork的

MyWCFService.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从装app.cofing我的Windows窗体客户端调用WCF服务。

  1. 如何避免上面提到的问题?
  2. 我可以有我的WCF服务的一个配置文件和服务库?
  3. 如何在两者之间共享?
+0

你不能有一个'应用程序。库项目中的config文件 - 它将被忽略。 – McGarnagle

+0

您需要将设置从库的'app.config'复制到使用该库的程序的'app.config'。然后,配置机制按预期工作。 –

+0

_“问题是,当我从某个客户端调用我的WCF服务,并且一个函数正在WCFServiceLibrary中执行时,每当我调用AppSettings时,它都会检查调用客户端的配置文件!”_ - 请显示您的意思这个,最好用代码。 – CodeCaster

回答

1

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

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

有没有必要在客户端的DLL,如班会自动生成通过WCF访问服务。

现在对于正常使用的应用程序设置:

复制您的DLL的app.config文件到app.config文件,该文件使用DLL的可执行项目的应用程序设置。例如,这可能则是这样的:

<?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当它实际上是一个简单的...

+0

你的假设假设我是愚蠢的..其实我不是..我明确指出,我打电话给一个Windows服务托管的WCF服务,是的,我有一个服务引用WCF在我的客户端项目。 –

+2

我不是故意暗示你是愚蠢的,我不认为你是这样,因为无论我们多么有经验,我们都有时犯下最可怕的错误。但是,访问客户端配置的唯一可能的解决方案是访问配置的类作为客户端的一部分运行。 –

+0

但我的问题完全相反,当实际上预期的配置是WCF服务调用的库项目中的配置文件时,正在访问客户端配置。 –