2012-04-23 6 views
0

У меня есть win-сервис, на котором размещается WCF-сервис. Win-сервис работает на компьютере «MyComp1». WCF-сервис App.config выглядит следующим образом:WCF: изменение базыAddress во время установки или во время выполнения

 <baseAddresses> 
     <add baseAddress="http://localhost:8732/MyService" /> 
     </baseAddresses> 

Когда я пытаюсь импортировать WSDL из этой службы (например, с использованием Delphi WSDLImp.exe) Я получаю ошибки как «Не удалось импортировать http://localhost:8732/MyService?xsd=xsd0 " И это правильное поведение, потому что служба не работает на localhost. Но места XSD в сгенерированном WSDL содержат локально-подобные адреса.

Теперь я хочу изменить baseAddress во время установки или во время выполнения, потому что я не хочу, чтобы пользователи вручную редактировали App.config. Я слышал о FlatWSDL, но есть ли другие методы для этого?

ответ

3

Вы можете использовать System.Xml.XmlDocument, чтобы запрограммировать ваш файл App.config.

XmlDocument xmlDoc = new XmlDocument(); 

xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

xmlDoc.SelectNodes("/configuration/system.serviceModel/services/service/host/baseAddresses/add") 
    .Cast<XmlNode>().ToList() 
    .ForEach(o => o.Attributes["baseAddress"].Value = "http://localhost:8732/MyService"); 

xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

Просто убедитесь, что использовать правильное выражение XPath вашего базового адреса. Надеюсь это поможет.

+0

В службе wcf, где вы находитесь, этот код идет? – ZoomVirus

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