#c# #wcf #app-config
#c# #wcf #app-config
Вопрос:
У меня есть проект, который является клиентом WCF, использующим конечные точки netTcp. Проект компилируется в DLL, на которую ссылается другой проект. Я использую AppSettings для переключения между локальными и удаленными конечными точками ip следующим образом:
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 находятся мои настройки приложений и конечные точки 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? Спасибо.
Комментарии:
1. Можете ли вы показать соответствующие (конфигурационные) файлы?
Ответ №1:
Похоже, вы пытаетесь использовать конфигурационный файл с DLL — это не сработает. Вам необходимо установить настройки вашего приложения и настройки, зависящие от WCF, в файле приложения приложения, которое ссылается на библиотеку DLL WCF. Эта DLL будет использовать конфигурационный файл вызывающего приложения.
Другими словами:
MyWCF.dll — это ваша библиотека DLL WCF.
MyApplication.exe — это приложение, которое ссылается WCF.DLL .
Вы должны поместить настройки своего приложения и настройки system.ServiceModel в файл app.config MyApplication.exe . MyWCF.Затем DLL должна прочитать значения из этой конфигурации.
Комментарии:
1. Спасибо, Тим. Это сработало. Я заметил, что App.config переименовывается во что-то вроде MyApplication.exe.config. Должно ли это быть так?
2. @RyanR — Компилятор .NET делает это по умолчанию. Я не знаю, есть ли способ переопределить или изменить это — я просто оставляю все как есть.
Ответ №2:
Файл настроек приложения загружается из контекста запускаемого приложения, поэтому он должен быть либо в этом проекте, либо ссылаться на него из проекта запуска.
Комментарии:
1. Спасибо за ваш ответ, Декер, но я могу выбрать только один.
2. Вам не нужно иметь файл конфигурации в указанной dll, только запускаемый exe.
Ответ №3:
Папка, используемая для установки утилиты, должна содержать Exe-файл, поддерживающий dll и exe.config-файл