我觉得这个问题有一个非常明显的答案,但我的Google-fu证明太弱而无法找到它。
我在一个唯一的测试服务器/环境上有一个.NET应用程序,APPSVR是为了争论。此应用程序调用的Web服务驻留在四个不同的环境(SVC1,SVC2等)中。每个月我都会收到来自QA的电子邮件,要求我将应用程序指向正确的服务环境,以便进行当月的测试。这是一个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文件引用应用程序的根代码?
或者,或者,是否有其他一些解决此问题的方法,不需要每月微管理或相同代码的多个副本/部署?
答案 0 :(得分:0)
有几种解决方案。
1)使用在所有环境中命名相同的文件服务器,并将应用程序设置存储在那里。这要求您在每个环境中都有dns条目,指向单独的文件服务器。
2)您实际上可以只使用相同的服务,并再次使用dns在环境中路由
3)您可以在每个环境中部署此部分应用程序设置,并在每次需要发布时停止将其部署为解决方案的一部分
4)您可以使用自定义代码和/或configSource =“c:\ ...”的组合
我不太确定你的意思是通过引用应用程序的根代码。
答案 1 :(得分:0)
如果我理解正确,我认为你只需要编写一些代码来根据某些属性决定URL ...现在我们会说querystring,尽管你可能想要一个更安全的方法。
我会:
将设置添加到配置中: HTTP:// SVC1 / CMS-Web服务/ CMS-web服务 HTTP:// SVC1 / CMS Web网页/ CMS-测试web服务
将新设置添加到项目/ 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不可用的任何其他内容,这将导致问题。
希望有所帮助!