WCF:在安装过程中或运行时修改基址

本文关键字:运行时 修改 过程中 安装 WCF | 更新日期: 2023-09-27 18:31:54

我有托管 WCF 服务的 win-service。Win-service在计算机"MyComp1"上运行。WCF 服务 App.config 如下所示:

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

当我尝试从该服务导入 WSDL 时(例如使用 Delphi WSDLImp.exe),我收到诸如"无法导入 http://localhost:8732/MyService?xsd=xsd0"之类的错误,这是正确的行为,因为该服务未在本地主机上运行。但是,在生成的 WSDL 中,XSD 的位置包含类似本地主机的地址。

现在,我想在安装期间或运行时修改 baseAddress,因为我不希望用户手动编辑 App.config。我听说过 FlatWSDL,但还有其他技术可以做到这一点吗?

WCF:在安装过程中或运行时修改基址

您可以使用

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 表达式即可。希望这有帮助。