在web项目中的类库中引用webservice 在部署后更改webservice路径的方法
生活随笔
收集整理的這篇文章主要介紹了
在web项目中的类库中引用webservice 在部署后更改webservice路径的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在一次開發過程中發現這樣的問題:
我引用外部的webservice連接并不是在solution里面的web層,而是在solution里面的類庫中引用的,原本在web中引用自動生成的引用路徑會在web.config里面生成,例如:
<appSettings>
????????<add?key="BidSer.Service"?value="http://192.168.1.16:8083/Service.asmx"/>
</appSettings> 但是如果是在類庫里面引用的話,默認就不會在web.config里面出現key值了,會在類庫里面自動生成app.config,生成如下的配制信息:
<?xml?version="1.0"?encoding="utf-8"??>
<configuration>
????<configSections>
??<sectionGroup?name="applicationSettings"?type="System.Configuration.ApplicationSettingsGroup,?System,?Version=2.0.0.0,?Culture=neutral,?PublicKeyToken=b77a5c561934e089"?>
???<section?name="COM365.BLL.Properties.Settings"?type="System.Configuration.ClientSettingsSection,?System,?Version=2.0.0.0,?Culture=neutral,?PublicKeyToken=b77a5c561934e089"?requirePermission="false"?/>
??</sectionGroup>
?</configSections>
?<applicationSettings>
??<COM365.BLL.Properties.Settings>
???<setting?name="COM365_BLL_BidSer_Service"?serializeAs="String">
????<value>http://192.168.1.16:8083/Service.asmx</value>
???</setting>
??</COM365.BLL.Properties.Settings>
?</applicationSettings>
</configuration> 本來我想,在發布網站之后app.config應該會部署出來吧,否則怎么在部署之后更改webservice的引用呢?可是在部署之后app.config找不到了,難道是把app.config里面的值封裝到bin里面去了嗎?有點匪夷所思,如果封裝進去的話,那何必生成一個app.config給咱們用哦。仔細查找在引用webservice之后生成的東西。
第一,在類庫里面會自動添加一個properties文件夾
里面會通過代碼生成器生成兩個配制文件,不能手動更改的。
第二個生成的就是app.config文件了。
第三個會在類庫的跟目錄下面生成一個Setting的類,這是一個密封類,并且是訪問的權限是internal的。
namespace?COM365.BLL.Properties
{
????//?This?class?allows?you?to?handle?specific?events?on?the?settings?class:
????//??The?SettingChanging?event?is?raised?before?a?setting's?value?is?changed.
????//??The?PropertyChanged?event?is?raised?after?a?setting's?value?is?changed.
????//??The?SettingsLoaded?event?is?raised?after?the?setting?values?are?loaded.
????//??The?SettingsSaving?event?is?raised?before?the?setting?values?are?saved.
????internal?sealed?partial?class?Settings
????{
????????public?Settings()
????????{
????????????//?//?To?add?event?handlers?for?saving?and?changing?settings,?uncomment?the?lines?below:
????????????//
????????????//?this.SettingChanging?+=?this.SettingChangingEventHandler;
????????????//
????????????//?this.SettingsSaving?+=?this.SettingsSavingEventHandler;
????????????//
????????}
????????private?void?SettingChangingEventHandler(object?sender,?System.Configuration.SettingChangingEventArgs?e)
????????{
????????????//?Add?code?to?handle?the?SettingChangingEvent?event?here.
????????}
????????private?void?SettingsSavingEventHandler(object?sender,?System.ComponentModel.CancelEventArgs?e)
????????{
????????????//?Add?code?to?handle?the?SettingsSaving?event?here.
????????}
????}
}
這里面能做什么呢,通過這個類就可以來更改app.config里面的元素值了。因為它是一個inernal的,所以在別的類庫和web層里面無法直接使用這個類,所以我在此引用webservice的類庫里面做了一個Config來封裝它來達到可以在外部更新值的效果。
namespace?COM365.BLL
{
????public?class?Config
????{
????????/**////?<summary>
????????///?根據?Web.Config?配制?BidSer.Service?的路徑
????????///?</summary>
????????public?static?void?SetBidSerUrl()
????????{
????????????COM365.BLL.Properties.Settings.Default.Properties["COM365_BLL_BidSer_Service"].DefaultValue?=?ConfigurationManager.AppSettings["BidSer.Service"];
????????????COM365.BLL.Properties.Settings.Default.Save();
????????????COM365.BLL.Properties.Settings.Default.Reload();
????????}
????}
} 第一步是通過web.config里面的值來更新app.config里面的值,因為Setting.Default是只讀的,所以只能通過Properties來更新了。
第二步和第三步需要放一起的,否則更新不會有效果的。
如果跟我一樣是通過讀取web.config里面的值來更新app.config里面的值的話,就可以把這函數放到Golable里面,這樣的效果就是每次web.config被更改或者服務器重起的話都會自動更新到app.config里面了。
<%@?Application?Language="C#"?%>
<script?RunAt="server">
????void?Application_Start(object?sender,?EventArgs?e)
????{
????????//?在應用程序啟動時運行的代碼
????????CommConfig.OnApplicationStart(Server.MapPath(Context.Request.ApplicationPath));
????????COM365.BLL.Config.SetBidSerUrl();
????}
????void?Application_End(object?sender,?EventArgs?e)
????{
????????//??在應用程序關閉時運行的代碼
????}
????void?Application_Error(object?sender,?EventArgs?e)
????{
????????//?在出現未處理的錯誤時運行的代碼
????}
????void?Session_Start(object?sender,?EventArgs?e)
????{
????????//?在新會話啟動時運行的代碼???????????????
????}
????void?Session_End(object?sender,?EventArgs?e)
????{
????????//?在會話結束時運行的代碼。?
????????//?注意:?只有在?Web.config?文件中的?sessionstate?模式設置為
????????//?InProc?時,才會引發?Session_End?事件。如果會話模式設置為?StateServer?
????????//?或?SQLServer,則不會引發該事件。
????}
???????
</script>
轉載于:https://www.cnblogs.com/sherrys/archive/2007/01/25/630351.html
總結
以上是生活随笔為你收集整理的在web项目中的类库中引用webservice 在部署后更改webservice路径的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据安全管理:RSA加密算法,签名验签流
- 下一篇: Maven 手动安装Jar包的例子