2011-10-21 60 views
2

我有一個項目是使用netTCP端點的WCF客戶端。該項目編譯成另一個項目引用的DLL。我使用的AppSettings像這樣的本地和遠程IP端點之間進行切換:App.config AppSettings返回null

public EmbeddedClient() 
    { 
     //Grab ip to use: remote or local (used for simulator) 
     String location = ConfigurationSettings.AppSettings["ipAddress"]; 
     String ip = ConfigurationSettings.AppSettings[location]; 

     //Default to localhost if no appsetting was found 
     if (ip == null) 
      ip = "localhost"; 

     String address = String.Format("net.tcp://{0}:9292/EmbeddedService", ip); 

     //Setup the channel to the service... 
     channelFactory = new ChannelFactory<IEmbeddedService>(binding, new EndpointAddress(address)); 

    } 

我App.Config中是我有我的AppSettings和WCF端點:

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
    <appSettings> 
    <add key="ipAddress" value="local"/> 
    <!-- Replace above value to "local" (Simulator) or "remote" (Harware)--> 
    <add key="local" value="localhost"/> 
    <add key="remote" value="192.168.100.42"/> 
    </appSettings> 

    <system.serviceModel> 
     <!--WCF Endpoints go here---> 
    </system.serviceModel> 
    </configuration> 

當我編譯該項目appsetting總是返回null。我還注意到,編譯後,app.config被重命名爲Embedded_DCC_Client.dll.config。爲什麼它無法找到我的appsettings?爲什麼它返回null?謝謝。

+0

,你能否告訴有關(配置)文件的文件夾? –

回答

7

這聽起來像你試圖使用DLL的配置文件 - 這將無法正常工作。您需要在應用程序的應用程序文件中將您的應用程序設置和WCF特定設置設置爲引用 WCF DLL。 Th DLL將使用調用應用程序的配置文件。

換句話說:

MyWCF.dll - 這是你的WCF DLL。

MyApplication.exe - 這是一個引用WCF.DLL的應用程序。

您會將您的應用程序設置和system.serviceModel設置放入MyApplication.exe的app.config文件中。然後MyWCF.DLL應該從該配置讀取值。

+0

謝謝蒂姆。這工作。我注意到App.config被重命名爲MyApplication.exe.config。它是否必須是這樣? –

+0

@RyanR - .NET編譯器默認執行此操作。我不知道是否有辦法改寫或改變 - 我只是保持原樣。 – Tim

3

應用程序設置文件是從啓動的應用程序的上下文加載的,因此它需要位於該項目中或從啓動項目引用。

+0

謝謝你的答案Decker,但我只能選擇一個。 –

+0

你不需要在引用的dll中有配置文件,只需要啓動exe。 – Decker97

0

這是用來安裝實用程序應包含的EXE文件,支持DLL和exe.config文件