Web專案的類庫中引用WebService,在部署後動態配置WebService路徑的方法
阿新 • • 發佈:2019-02-08
通常我們的專案呼叫WebService都是在Web專案中,VS2005會在Web.config中自動生成如下的配置,方便在部署後動態更改:
<applicationSettings>
<WebTest.Properties.Settings>
<setting name="WebTest_Service1_Service1" serializeAs="String">
<value>http://localhost/WebService/Service1.asmx</value>
</setting> </WebTest.Properties.Settings>
</applicationSettings>
publicstaticvoid AutoBuildConfig()
{
Properties.Settings.Default.Properties["XXX_XXX_Business_XXXMailService_MailService"].DefaultValue
= ConfigHelper.GetParameterValue("XXXMailServiceUrl");
Properties.Settings.Default.Save();
Properties.Settings.Default.Reload();
}
<applicationSettings>
<WebTest.Properties.Settings>
<setting name="WebTest_Service1_Service1" serializeAs="String">
<value>http://localhost/WebService/Service1.asmx</value>
</setting> </WebTest.Properties.Settings>
</applicationSettings>
目前做“XXX三期3.2”的開發時,在“XXX.XXX.Business”中呼叫了XXX的WebService,但對於類庫專案,其如上的配置資訊是生成在app.config中的,那麼,如何將其做成動態可配置的呢?
通過實驗,總結了三種實現方法:
1、將app.config中的配置資訊拷貝到Web.config中,這是最簡單的一種方法;
2、在WebService呼叫時臨時指定Url,這也是一種可用方法;
3、我希望使用統一引數配置元件的CommonConfig.xml來定義待呼叫的WebService路徑,又不想在程式中臨時指定Url,為此,從網上找了一種看起來比較優雅實則費力不討好的程式設計實現方法。:)
1)在“XXX.XXX.Business”中新建類WebServiceConfig,定義如下方法:
{
Properties.Settings.Default.Properties["XXX_XXX_Business_XXXMailService_MailService"].DefaultValue
= ConfigHelper.GetParameterValue("XXXMailServiceUrl");
Properties.Settings.Default.Save();
Properties.Settings.Default.Reload();
2)在Web專案的Global的Application_Start中呼叫上面的方法:WebServiceConfig.AutoBuildConfig();
這樣,也實現了WebService路徑的動態配置,還可通過引數配置的管理頁面進行管理。可惜,還是要重啟Web才能生效,倒不如第2種方法的實時性強。