2013-07-18 40 views
0

我動態地將對web服務的引用添加到項目中,我需要將它們的相關信息添加到web.config中。合併web.config和其他.config文件

svcutil優雅地添加了包含「system.serviceModel」節點的配置文件和子節點。

我在尋找的是如何將這些文件中的信息合併到現有的web.config中。我希望'configSource'屬性可以提供幫助,但是,它不能在「system.serviceModel」部分組上使用,但只能在其內容上使用。然而,與修改web.config本身相比,從所有配置中分離「system.serviceModel」節點將需要相同甚至更多的解析。

我想知道,如果有另一個選項來重用web.config中的子配置文件的數據?特別是,當涉及整個部門組?

回答

-1

由於沒有提出其他解決方案,我創建了一個函數來手動修改web.config並從較小的配置複製數據。

萬一有人發現了它有用或暗示一個更好的辦法:

# Changes web.config: adds into system.serviceModel group data for binding and for endpoint for the webservice 
Function add-config-source 
{ 
    Param($configFile) 

     if(($configFile -eq "") -or ($configFile -eq $null)) 
     { $errors = $errors + " Error: path to webservice configuration file was not found. "; } 

     # get data from the web service config file 
     $webServiceConfigXml = [xml](get-content $configFile) 
     # cloning elements that we need 
     $bindingNodeClone = $webServiceConfigXml.SelectSingleNode("//binding").Clone(); 
     $endpointNodeClone = $webServiceConfigXml.SelectSingleNode("//endpoint").Clone(); 
     $serviceModelNodeClone = $webServiceConfigXml.SelectSingleNode("//system.serviceModel").Clone(); 

     # reading and modifying web.config 
     $webConfigXml = New-Object xml 
     # find the Web.config file 
     $config = $project.ProjectItems | where {$_.Name -eq "Web.config"} 
     # find its path on the file system 
     $localPath = $config.Properties | where {$_.Name -eq "LocalPath"} 
     # load Web.config as XML 
     $webConfigXml.Load($localPath.Value) 

     # select the node 
     $configurationNode = $webConfigXml.SelectSingleNode("configuration") 

     # check if 'system.serviceModel' node exists 
     $serviceModelNode = $configurationNode.SelectSingleNode("system.serviceModel"); 

     if ($serviceModelNode -eq $null) 
     { 
      $serviceModelNodeClone = $webConfigXml.ImportNode($serviceModelNodeClone, $true); 
      $configurationNode.AppendChild($serviceModelNodeClone); 
     } 
     else 
     { 
      $existingBasicHttpBindingNode = $serviceModelNode.SelectSingleNode("//basicHttpBinding"); 
      $bindingNodeClone = $webConfigXml.ImportNode($bindingNodeClone, $true); 
      $existingBasicHttpBindingNode.AppendChild($bindingNodeClone); 

      $existingClientNode = $serviceModelNode.SelectSingleNode("//client"); 
      $endpointNodeClone = $webConfigXml.ImportNode($endpointNodeClone, $true); 
      $existingClientNode.AppendChild($endpointNodeClone); 
      $configurationNode.AppendChild($serviceModelNode); 
     } 

     # save the Web.config file 
     $webConfigXml.Save($localPath.Value) 
} 
相關問題