我有一个 Windows窗体应用程序,它连接到典型configuration\system.serviceModel\client\endpoint
节点下的app.config中配置的Web服务,如下所示:
<system.serviceModel>
<bindings>
...
</bindings>
<client>
<endpoint address="http://blahblah/service.asmx" ... />
</client>
</system.serviceModel>
此应用程序通常用于相当锁定的Windows系统,因此需要管理员权限(通常通过UAC)来修改安装应用程序的Program Files目录中的任何文件。对大多数配置来说都没问题,因为它不应该是用户可配置的。
我想将端点配置重定位到用户的app数据文件夹,以便以后修改,安装后,无需任何管理员干预。
我知道我可以使用system.serviceModel下的client元素的configSource
属性指向一个单独的配置文件,但这似乎不支持绝对路径(更不用说理想的appdata环境变量),因此似乎不是指向appdata的选项。
因此,我的问题是,如何将此配置块重新定位到用户的appdata文件夹中的外部文件,在该文件中可以修改它而无需后续管理员干预,同时将其余配置安全地保存在程序文件安装文件夹中?
答案 0 :(得分:1)
您需要将<client>
部分“外部化”,如下所示:
将<client>
部分的内容移至新文件,例如`〜/ App_Data文件/配置/ Client.config“:
<client>
<endpoint address="http://blahblah/service.asmx" ... />
</client>
修改我们现有的配置以指向该外部化配置文件:
<system.serviceModel>
<bindings>
...
</bindings>
<client configSource="/App_Data/Config/Client.config" />
</system.serviceModel>
现在,您可以修改该外部文件中的客户端设置,而无需再触摸主web.config
文件。
请注意:更改web.config
时也会自动导致IIS应用程序池重新启动(从而重新加载新配置),当您修改时,不再这种情况这样的外化配置文件。因此,您需要显式回收IIS应用程序池以从配置文件中重新加载新设置