2011-12-05 37 views
1

我覺得這個問題有一個非常明顯的答案,但是我的Google-fu證明它太弱而無法找到它。多個web.config文件(在subdirs中)是否可以引用根代碼?

爲了爭論起見,我在唯一的測試服務器/環境APPSVR上有一個.NET應用程序。這個應用程序調用的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

如果我理解正確,我認爲你只需要編寫一些代碼來決定基於某個屬性的URL ......現在我們會說querystring,儘管你可能想要一個更安全的方法。

我想:

  1. 添加新設置到配置
  2. 添加設置的設置文件
  3. 重命名現有Web服務
  4. 覆蓋重命名的web服務的舊名稱
  5. 編寫一些代碼來做URL轉換。

  1. 設置添加到配置: 的http:// SVC1/CMS-Web服務/ CMS-webservice的 的http:// SVC1/CMS-Web服務/ CMS -test-webservice

  2. 將新設置添加到您的項目/屬性/設置s.settings文件

  3. 重命名由Visual Studio生成的類,方法是在解決方案資源管理器中突出顯示該類,按F2併爲其指定一個不同的名稱,例如, CmsWebServiceBase

  4. 現在重寫是由Visual Studio生成的Web服務類:

    public class CmsWebService : CmsWebServiceBase{ 
    } 
    
  5. 碼轉換邏輯構造:

    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不可用的東西。

希望有幫助!

+0

所以使用http參數而不是subdir。是的,那會奏效。我知道我錯過了一個明顯的答案......謝謝。 :-) – Dave

0

有幾個解決方案。

1)使用在所有環境中命名相同的文件服務器,並將應用程序設置存儲在那裏。這要求您在每個指向單獨文件服務器的環境中都有dns條目。

2)可以真正地有服務名稱相同,並再次,跨越

3)您可以部署在每個環境一旦應用程序設置這部分並停止部署它的環境中使用DNS路由因爲每次你需要釋放

4時的解決方案),可以使用的自定義代碼和/或configSource =「C:\ ...」組合的一部分

我並不很清楚你的意思儘管參考應用程序的根代碼。

+0

不幸的是,除了應用程序和它所在的特定服務器,我幾乎沒有直接控制任何東西。我懷疑我能夠讓網絡團隊在這裏幫助我解決這個問題,特別是因爲這個問題僅限於測試環境。我的prod應用程序指向一個prod服務實例。 「root code」我的意思是擁有APPSVR/app中的所有代碼(所以只有它的一個實例),並且具有位於APPSVR/app/SVC#中的特定web.config文件。 – Dave

相關問題