【发布时间】:2012-03-15 16:19:52
【问题描述】:
我们今天发生了一件让我思考的事情。我们有一个项目,其中包含用于各种配置的非常标准的 web.config 转换设置。有一个部分控制对我们 DAO 服务的访问,如下所示:
<endpoint address="http://myserver/myservice1.svc/basicHttp"
binding="basicHttpBinding" contract="MyAssembly.IItem" name="DataAccessEndPoint"
kind="" endpointConfiguration="" />
<endpoint address="http://myserver/myservice2.svc/basicHttp"
binding="basicHttpBinding" contract="MyAssembly.IItem2" name="LoggingEndPoint"
kind="" endpointConfiguration="" />
还有这样的变换:
<endpoint address="http://mytestserver/myservice1.svc" name="DaoEndPoint" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
<endpoint address="http://mytestserver/myservice2.svc" name="LoggingEndPoint" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
希望您会发现这里的错误 - DaoEndPoint 的名称不匹配。不幸的是,创建它的开发人员没有,并且还在本地对实时服务进行调试,这导致测试部署到,是的,指向实时。幸运的是,我们很快就发现了它,但我相信您可以在这里看到极度痛苦的可能性!
我在创建转换文件时考虑了您的意图,在我看来,如果您进行转换,您打算转换某物。因此,如果在主 .config 文件中存在 DaoEndPoint 转换但没有匹配的 DaoEndPoint 项,则转换(以及因此部署)失败会很好。
所以我是在征求人们的意见,这是有用的吗?是不是有点矫枉过正?我完全没有抓住重点吗?
另外,有什么东西可以做到这一点吗?我很高兴挖掘并开发解决方案,但如果有人为我完成了这些工作,我会更高兴;)
【问题讨论】:
-
不知道任何会导致异常的事情,但可能有用。可能只想尝试将主 web.config 中的值留空,如果它没有得到转换,您将很快在应用程序中收到错误。没有那么有用,但可以防止任何无意的 PROD 访问。
-
这样做的问题是,如果不添加值,您将无法在本地进行调试,当开发人员忘记再次取出该值时,这会使我们回到最初的问题......跨度>
标签: c# msbuild web-config