2013-07-18 3 views
0

webservices에 대한 참조를 프로젝트에 동적으로 추가하고 이에 대한 정보를 web.config에 추가해야합니다.web.config 및 기타 .config 파일 병합

svcutil은 "system.serviceModel"노드와 하위 노드가 포함 된 구성 파일을 정상적으로 추가합니다.

내가 찾고있는 것은이 파일의 정보를 기존 web.config에 병합하는 방법입니다. 나는 'configSource'속성이 도움이되기를 바랐지만, "system.serviceModel"섹션 그룹에는 사용할 수 없지만, 그 내용에 대해서만 사용할 수 있기를 바랬다. 그러나 모든 config에서 "system.serviceModel"노드를 분할하려면 web.config 자체를 수정하는 것과 비교하여 구문 분석이 동일하거나 더 많이 필요합니다.

web.config에서 자식 구성 파일의 데이터를 다시 사용할 수있는 다른 옵션이 있다면 궁금합니다. 특히 전체 섹션 그룹이 참여할 때?

답변

-1

다른 해결책이 제안되지 않았으므로 web.config를 수동으로 수정하고 더 작은 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) 
} 
: 누군가가 도움을 찾거나 더 나은 방법을 제안 그냥 경우