在一次开发过程中发现这样的问题:
我引用外部的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路径的方法相关推荐

  1. Myeclipse2015把web项目添加至tomcat中,添加列表中却没有想要添加的项目

    Myeclipse2015把web项目添加至tomcat中,添加列表中却没有想要添加的项目?? 解决方法: 项目-右键-Properties-Myeclipse-Project Factes -  D ...

  2. eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法

    eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法 参考文章: (1)eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法 (2)https://www.cnbl ...

  3. IDEA 创建Web项目并在Tomcat中部署运行

    1.IDEA下的WEB项目新建就不说了. 2.配置tomcat:file-->settings-->Build,Execution,Deployment-->Application ...

  4. Intellij IDEA 创建Web项目并在Tomcat中部署运行

    一.创建Web项目 1.File -> New Module,进入创建项目窗口 2.选择Java类型,在 Module name 处输入项目名,点击Next 3.勾选 Web Applicati ...

  5. Web项目:解决eclipse中jsp文件报错javax.servlet.http.HttpServlet 提示 was not found on the Java Build Path的错误

    具体错误如图示如下: 具体结局方案如下: 1.右击web工程(你的项目名字)->属性或Build Path->Java Build Path->Libraries-> Add ...

  6. Myeclipse的web项目导入到Eclipse中

    为什么80%的码农都做不了架构师?>>>    1.导入项目的文件夹是什么名字,则source-path就配置成什么,如eclipse:WebContent,MyEclipse:We ...

  7. web项目发布到iis中readystate一直处于 interactive_Framer Web 发布后,终于像个正经的设计软件了。...

    Framer 自从创立以来,始终处于不温不火的状态,经过这么多年的发展,定位依然很尴尬,设计师用不来,工程师更不屑于用.从最早的 Framer Classic 到后来震惊业界的 Framer X,虽然 ...

  8. Web项目替换jar包中的文件的方法

    经常遇到这样的问题,需要修改jar包中的方法.应该如何做? 1.有些很人性化的框架jar包,比如SpringSecurity,可以修改配置文件指定一个新建的类,让类实现Jar包中的对应的接口就好了. ...

  9. idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总

    https://www.cnblogs.com/hlyxd/p/13092615.html 一.JAVA servlet 2.x规范: 项目目录结构必须要有WEB-INF,web.xml等文件夹和文件 ...

最新文章

  1. 关于未来的10点核心思考
  2. h5实现网页内容跟随窗口大小移动_HTML5使用四种方法实现移动页面自适应手机屏幕的方法总结...
  3. python子类初始化父类_Python实现子类调用父类的初始化实例
  4. jvm7 jvm8_JVM PermGen –您在哪里?
  5. java 常用流_Java流类图结构: 流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数...
  6. 本机找不到workstation 和 Computer Browser服务
  7. 卸载自己编译linux的内核,Linux内核模块的编译、加载和卸载
  8. 【无线通信】基于matlab无线传感网络WSN仿真【含Matlab源码 1237期】
  9. 时序分析 42 -- 时序数据转为空间数据 (一) 格拉姆角场
  10. FLIP:Scaling Language-Image Pre-training via Masking
  11. Elasticsearch 第三方工具包Bboss的简单使用
  12. 天融信防火墙保存配置_天融信防火墙配置备份 飞塔防火墙配置手册
  13. 抖音如何热门,发布不会提示重复
  14. /* 题目: * 打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和 等于该数本身。 例如: 153 是一个 水仙花数
  15. 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 WMT数据处理
  16. 测试-答对5道题的人是天才,答对4道的是帅才,答对3道的是将才,答对2道的是奇才,答对1道的是人才
  17. Sphinx 0.9.9/Coreseek 3.2 参考手册
  18. 视音频数据处理入门:H.264视频码流解析(java)
  19. bpsk传输系统实验matlab,BPSK传输系统实验
  20. 离散数学学习笔记----集合代数

热门文章

  1. 神策数据入选 Facebook 全球合作计划,助力出海客户拥抱全球化广告生态
  2. PPT 下载 | 神策数据朱德康:用户中台建设实践解析
  3. 神策数据荣获“年度最具影响力大数据服务厂商”奖项
  4. 百度视频携手神策数据 为用户精准推送短视频内容
  5. 一下科技完成5亿美元E轮融资,神策助力秒拍实现数据驱动
  6. vim基础-一般模式
  7. 在Linux/Centos下用wondershaper限速
  8. 2016全球数据新闻奖(DJA)颁布, 12个获奖作品全剖析
  9. 自定义webview,根据网页大小确定webview大小
  10. Nginx源码分析(3)