2010-11-01 5 views
1

У меня есть веб-сервис WCF ASP.Net 4.0, который мы будем называть «WebService». WebService потребляет сборку библиотеки классов, которую мы будем называть «WebServiceClassLibrary». WebServiceClassLibrary ссылается на сборку библиотеки классов («ExternalClassLibrary»). ExternalClassLibrary построен для использования файла конфигурации. Он использует этот файл, чтобы узнать, где он должен отправлять HTTP-сообщения во время выполнения. У меня возникла проблема, где, где бы я ни находился, чтобы добавить раздел конфигурации для ExternalClassLibrary, похоже, используется настройка по умолчанию (поведение, которое я ожидал, когда он не может найти файл конфигурации во время выполнения).Где находится .Net В поисках файла конфигурации?

Я ожидаю, что это значит, что когда .Net пытается найти конфигурацию для ExternalClassLibrary, он не может этого сделать и использует информацию о конфигурации, найденную в скомпилированной сборке. Я попытался переопределить эту конфигурацию, разместив раздел конфигурации в файле web.config для WebService, создав файл конфигурации для ExternalClassLibrary и создав файл конфигурации для WebServiceClassLibrary. Даже если я попытаюсь переопределить конфигурацию в каждом из этих мест, она все равно заканчивается использованием конфигурации по умолчанию. Я размещаю сайт в IIS 7.

Может кто-нибудь, пожалуйста, скажите мне, как я могу определить, где мне нужно разместить эту переопределяющую конфигурационную информацию? Я попытался использовать монитор процессов SysInternals для просмотра попыток чтения файловой системы, но он показывает только два возможных места, чтобы переопределить конфигурацию, и ни один из них не сделал трюк.

Цените это!

- UPDATE, Вот содержимое файла XML Я пытаюсь загрузить -

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="MyAppName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <applicationSettings> 
     <MyAppName.Properties.Settings> 
      <setting name="APIURL" serializeAs="String"> 
       <value>http://servername/default.html</value> 
      </setting> 
      <setting name="APIAPPINI" serializeAs="String"> 
       <value>app.ini</value> 
      </setting> 
      <setting name="ApiUrlRoot" serializeAs="String"> 
       <value>https://www.domain.com/company[instance]test/index.htm</value> 
      </setting> 
      <setting name="ApiInstances" serializeAs="Xml"> 
       <value> 
        <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
         <string>usa</string> 
         <string>eu</string> 
         <string>asia</string> 
         <string>lat</string> 
         <string>jpn</string> 
        </ArrayOfString> 
       </value> 
      </setting> 
      <setting name="ApiKey" serializeAs="String"> 
       <value>password</value> 
      </setting> 
      <setting name="ApiUrlRoot" serializeAs="String"> 
       <value>http://site[instance].domain.com/</value> 
      </setting> 
      <setting name="ProductId" serializeAs="String"> 
       <value>12345</value> 
      </setting> 
     </MyAppName.Properties.Settings> 
    </applicationSettings> 
</configuration> 
+0

Не уверен, что это поможет, но у меня был аналогичный вопрос о файлах конфигурации для библиотек классов некоторое время назад .... http://stackoverflow.com/questions/2526202/where-are-config-files-for-class-libraries-physically-located –

+0

Большинство сообщений на этой странице говорят о файле конфигурации, который используется из родительского или потребительского приложения. Это то, что я нашел в прошлом, но почему-то это не происходит сейчас. Кажется ненадежным. WebService - это потребляющее приложение, но добавление конфигурации в этот файл не приводит к использованию обновляемых значений. – omatase

ответ

1

Правильный ответ (как мой вопрос был сформулирован) на самом деле в самом вопросе

Я попытался переопределить эту конфигурацию, поместив раздел конфигурации в файле web.config ...

В .Net, когда сборка потребляется, инфраструктура смотрит на конфигурацию в конфигурационном файле сборщика. Так вот ответ на вопрос. Именно здесь я научился размещать информацию о конфигурации для сборок в прошлом, но в этом случае этот метод, казалось, не удался.

Причина, по которой мне не повезло, в этом случае файл web.config, переопределяющий конфигурацию по умолчанию, вызван ошибкой в ​​моем коде, где при попытке запросить значение в файле конфигурации я явно запрашивал " DefaultValue ", который всегда будет тем, что находится в скомпилированной сборке.

Код было так:

Properties.Settings.Default.Properties["ApiUrlRoot"].DefaultValue; 

Я не понимаю, в то время как я разрабатывал, что это будет так.Я должен был пробы и ошибками, это получить значение при индексировании в свойства вместо стандартного строго типизированного метода для чтения значений:

Properties.Settings.Default.ApiUrlRoot; 

Это потому, что эта часть моего кода должна была прочитать значение из конфигурации файл динамически. В зависимости от ситуации он читал другое значение из файла конфигурации. В конце концов, здесь приведена версия кода динамического конфигурирования, который работает:

Properties.Settings.Default.PropertyValues["ApiUrlRoot"].PropertyValue; 
2

Ваш ExternalClassLibrary должен загрузить конфиг в

ConfigurationManager.OpenExeConfiguration("ExternalClassLibrary.dll.config"); 

.Net ConfigManager по умолчанию нагрузок только основная конфигурация процесса (exe.config/web.config), любая dll, использующая dll.config, должна загружаться явно.

+0

Это то, что я искал. Ценить это! – omatase

+0

Хорошо, я должен был говорить слишком рано. Он загружает конфигурационный файл, HasFile является истинным, и он даже показывает путь как файл конфигурации как правильный файл, но если я посмотрю поближе, я увижу, что загруженные приложения не загружены. Это, несмотря на то, что в загруженном файле конфигурации есть ApplicationSettings. Я думаю, проблема в том, что она будет загружать только applicationSettings, если она знает конфигурацию, которую я хочу загрузить, но я не могу понять, как это сказать, и быстрый поиск Google по этому вопросу не проливает свет. Есть идеи? – omatase

+0

Можете ли вы опубликовать раздел xml – anivas

Смежные вопросы