在web项目中的类库中引用webservice 在部署后更改webservice路径的方法
生活随笔
收集整理的這篇文章主要介紹了
在web项目中的类库中引用webservice 在部署后更改webservice路径的方法
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在一次開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)這樣的問(wèn)題:
我引用外部的webservice連接并不是在solution里面的web層,而是在solution里面的類(lèi)庫(kù)中引用的,原本在web中引用自動(dòng)生成的引用路徑會(huì)在web.config里面生成,例如:
<appSettings>
????????<add?key="BidSer.Service"?value="http://192.168.1.16:8083/Service.asmx"/>
</appSettings> 但是如果是在類(lèi)庫(kù)里面引用的話(huà),默認(rèn)就不會(huì)在web.config里面出現(xiàn)key值了,會(huì)在類(lèi)庫(kù)里面自動(dòng)生成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> 本來(lái)我想,在發(fā)布網(wǎng)站之后app.config應(yīng)該會(huì)部署出來(lái)吧,否則怎么在部署之后更改webservice的引用呢?可是在部署之后app.config找不到了,難道是把a(bǔ)pp.config里面的值封裝到bin里面去了嗎?有點(diǎn)匪夷所思,如果封裝進(jìn)去的話(huà),那何必生成一個(gè)app.config給咱們用哦。仔細(xì)查找在引用webservice之后生成的東西。
第一,在類(lèi)庫(kù)里面會(huì)自動(dòng)添加一個(gè)properties文件夾
里面會(huì)通過(guò)代碼生成器生成兩個(gè)配制文件,不能手動(dòng)更改的。
第二個(gè)生成的就是app.config文件了。
第三個(gè)會(huì)在類(lèi)庫(kù)的跟目錄下面生成一個(gè)Setting的類(lèi),這是一個(gè)密封類(lèi),并且是訪(fǎng)問(wèn)的權(quán)限是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.
????????}
????}
}
這里面能做什么呢,通過(guò)這個(gè)類(lèi)就可以來(lái)更改app.config里面的元素值了。因?yàn)樗且粋€(gè)inernal的,所以在別的類(lèi)庫(kù)和web層里面無(wú)法直接使用這個(gè)類(lèi),所以我在此引用webservice的類(lèi)庫(kù)里面做了一個(gè)Config來(lái)封裝它來(lái)達(dá)到可以在外部更新值的效果。
namespace?COM365.BLL
{
????public?class?Config
????{
????????/**////?<summary>
????????///?根據(jù)?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();
????????}
????}
} 第一步是通過(guò)web.config里面的值來(lái)更新app.config里面的值,因?yàn)镾etting.Default是只讀的,所以只能通過(guò)Properties來(lái)更新了。
第二步和第三步需要放一起的,否則更新不會(huì)有效果的。
如果跟我一樣是通過(guò)讀取web.config里面的值來(lái)更新app.config里面的值的話(huà),就可以把這函數(shù)放到Golable里面,這樣的效果就是每次web.config被更改或者服務(wù)器重起的話(huà)都會(huì)自動(dòng)更新到app.config里面了。
<%@?Application?Language="C#"?%>
<script?RunAt="server">
????void?Application_Start(object?sender,?EventArgs?e)
????{
????????//?在應(yīng)用程序啟動(dòng)時(shí)運(yùn)行的代碼
????????CommConfig.OnApplicationStart(Server.MapPath(Context.Request.ApplicationPath));
????????COM365.BLL.Config.SetBidSerUrl();
????}
????void?Application_End(object?sender,?EventArgs?e)
????{
????????//??在應(yīng)用程序關(guān)閉時(shí)運(yùn)行的代碼
????}
????void?Application_Error(object?sender,?EventArgs?e)
????{
????????//?在出現(xiàn)未處理的錯(cuò)誤時(shí)運(yùn)行的代碼
????}
????void?Session_Start(object?sender,?EventArgs?e)
????{
????????//?在新會(huì)話(huà)啟動(dòng)時(shí)運(yùn)行的代碼???????????????
????}
????void?Session_End(object?sender,?EventArgs?e)
????{
????????//?在會(huì)話(huà)結(jié)束時(shí)運(yùn)行的代碼。?
????????//?注意:?只有在?Web.config?文件中的?sessionstate?模式設(shè)置為
????????//?InProc?時(shí),才會(huì)引發(fā)?Session_End?事件。如果會(huì)話(huà)模式設(shè)置為?StateServer?
????????//?或?SQLServer,則不會(huì)引發(fā)該事件。
????}
???????
</script>
轉(zhuǎn)載于:https://www.cnblogs.com/sherrys/archive/2007/01/25/630351.html
總結(jié)
以上是生活随笔為你收集整理的在web项目中的类库中引用webservice 在部署后更改webservice路径的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据安全管理:RSA加密算法,签名验签流
- 下一篇: Maven 手动安装Jar包的例子