2012-04-23 38 views
0

我有win-service託管WCF服務。 Win-service正在計算機「MyComp1」上運行。在WCF服務的App.config樣子:WCF:在安裝過程中或運行時修改baseAddress

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

當我試圖從服務導入WSDL(例如採用Delphi WSDLImp.exe)我越來越喜歡錯誤「無法導入http://localhost:8732/MyService?xsd=xsd0這是正確的行爲導致服務未在本地主機上運行。但生成的WSDL中的XSD位置包含類似localhost的地址。

現在我想在安裝過程中或運行時修改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 2014-10-06 14:59:13