[英]Can multiple web.config files (in subdirs) refer to root code?
我觉得这个问题确实有一个很明显的答案,但是事实证明我的Google-fu太虚弱了。
我在唯一的测试服务器/环境(APPSVR)上有一个.NET应用程序,以方便讨论。 此应用程序调用的Web服务位于四个不同的环境(SVC1,SVC2等)中。 每个月,我都会收到来自质量检查部门的电子邮件,要求我将应用程序指向该月测试所需的正确服务环境。 这是一个15秒钟的过程(在下面修改应用程序的web.config文件),但对我来说很烦人,它使他们无法完成工作,直到我看到电子邮件并完成为止。
<applicationSettings>
<CM_MVC.Properties.Settings>
<setting name="CM_MVC_CmsService_cms_webservice" serializeAs="String">
<value>http://SVC1/cms-webservice/cms-webservice</value>
</setting>
</CM_MVC.Properties.Settings>
</applicationSettings>
我要做的是进行设置,以便他们可以转到http:// APPSVR / app / SVC#使应用程序指向正确的服务环境。 不过,理想情况下,我不希望每次进行更改时都不必将整个应用实际发布到四个不同的目录中(这种情况很少见,但仍然...)。
关于将其他web.config文件放入子目录的所有发现,也显示(或暗示,据我所知)那些具有不同页面或工作流的子目录。 我什么都没有。 我只需要一个应用程序,一组页面和代码,但是需要一种方法来使该设置有所不同。
有没有办法在子目录中有一个web.config文件引用应用程序的根代码?
或者,是否有其他解决方案,不需要每月进行微管理或重复复制/部署相同代码?
有两种解决方案。
1)使用在所有环境中都命名为相同的文件服务器,并在其中存储应用程序设置。 这要求您在每个环境中都具有指向单独文件服务器的dns条目。
2)您实际上可以将服务命名为相同的名称,然后再次使用dns跨环境路由
3)您可以在每个环境中一次部署这部分应用程序设置,并在每次需要发布时停止将其作为解决方案的一部分进行部署
4)您可以结合使用自定义代码和/或configSource =“ c:\\ ...”
我不确定您指的是应用程序的根代码是什么意思。
如果我理解正确,我认为您只需要编写一些代码就可以基于某些属性来确定URL ...现在,尽管您可能想要一个更安全的方法,但我们还是要说querystring。
我会:
将设置添加到配置中:http:// SVC1 / cms-webservice / cms-webservice http:// SVC1 / cms-webservice / cms-test-webservice
将新设置添加到项目/Properties/Settings.settings文件中
重命名Visual Studio生成的类,方法是在解决方案资源管理器中将其突出显示,然后按F2键并为其指定其他名称,例如CmsWebServiceBase
现在,覆盖由Visual Studio生成的Web服务类:
public class CmsWebService : CmsWebServiceBase{ }
构造函数中的代码切换逻辑:
public CmsWebService(){ // figure out if we should use Test or Live if( HttpContext.Current != null ){ if( HttpContext.Current.Request.QueryString["test"] == "true" ){ HttpContext.Current.Session["test"] = "true"; } if( HttpContext.Current.Session["test"] == "true" ){ this.Url = MyProject.Properties.Settings.CM_MVC_CmsService_cms_webservice_test; } } }
请注意,如果您进行异步处理,或者使用WebService但Session不可用的其他任何方式,这将导致问题。
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.