遇到坑,然后找到解决方案,我就习惯做个记录。

情景:通过webservice调用一个第三方的库,在初始化第三方库的时候需要花费较长时间

目的:希望通过初始化一次,缓存下来,下次直接调用,而不必每次初始化。

处理思路:在web项目中添加全局应用程序类(Global.cs),通过其Application_Start事件完成初始化,初始化后保存到一个静态类文件的静态对象中,需要的时候从静态对象中获取。

技术预研:

预研一、使用字符串作为初始化的对象,达到预期目的,能存能取。

预研二、使用第三方对象作为初始化对象,能存不能取。发现每次调用webservice方法时:

a.Application_Start事件会被触发,造成每次都初始化。

b.之前初始化的变量为空。

不甘心,以为是初始化缓存方法不对,然后尝试了Application、HttpContext.Chache灯方式来存储初始化对象,得到相同的结果。

结论:事实似乎证明:使用基本的数据类型成功,使用其他对象类型不成功,复杂的数据对象(这里指的是第三方的对象)会造成微博webservice的每次调用都重启应用(即:触发Application_Start事件)。

后来尝试将复杂对象保存到数据字典中,居然成功了。

终极结论:

在使用webservice保存全局变量的时,遇到复杂对象,需要将对象嵌入到数据字典(Dictionary)中,否则会触发webservice 应用重启。

记住,在初始化的方法里面,不能出现其他复杂变量的引用,否则又会悲剧。

下面是代码:

  1. public class Global : System.Web.HttpApplication
  2. {
  3.  
  4. protected void Application_Start(object sender, EventArgs e)
  5. {
  6. if (AppContext.toolDic.Count == )
  7. {
  8. AppContext.InitQueueToolsDic();
  9. }
  10. }
  11. }
  1. public static class AppContext
  2. {
  3.  
  4. #region 初始化 QueueTools,使用 AppContext.toolDic["QueueTools"] 获取到初始化后的实例
  5. /// <summary>
  6. /// 初始化字典
  7. /// </summary>
  8. public static Dictionary<string, QueueTools> toolDic = new Dictionary<string, QueueTools>();
  9. /// <summary>
  10. /// 初始化队列对象,添加到字典
  11. /// </summary>
  12. public static void InitQueueToolsDic()
  13. { //writelog("初始0 ");这里不能写日志,因为写日志的方法里出现复杂变量会造成服务重启
  14. string ConfigFile = AppDomain.CurrentDomain.BaseDirectory + "bin\\esbmqsdk-config.xml";
  15. var queueTls = new QueueTools(ConfigFile);
  16. toolDic.Add("QueueTools", queueTls);
  17. }
  18. #endregion 初始化 QueueTools
  19. }

.net webService保存全局变量中的更多相关文章

  1. 用NSData和NSFileManager保存内存中的对象

    曾经接触过iOS开发,并且开发过两个应用,纵然青涩,也算是一断美好的回忆.转眼就已经一年多了!现在回过头来决定再次拿起iOS开发. 下面讲NSData: NSdata的概念 1.使用文件时需要频繁地将 ...

  2. c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”

    ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述     相关代码 using System; us ...

  3. webservice 从客户端中检测到有潜在危险的 Request.Form 值

    webservice中传递xml格式的参数时报错 webservice 从客户端中检测到有潜在危险的 Request.Form 值解决方案: 1.在web.config的system.web节点中添加 ...

  4. react 如何处理页面加载时无法将获取缓存信息存入全局变量中

    最近在做一个权限功能时,发现在读取用户公司ID进行列表查询 时,无法钭读取到缓存中的数据存入页面全局变量中进行加载查询 将问题代码整理出来 将信息存入缓存: let menuList = Helper ...

  5. 保存TextBox中的文字为Path功能

    保存TextBox中的文字为Path功能 今天再设计一个我自己程序的Icon时使用了Path+textbox做了图形,我不想导出为PNG,因为颜色比较单一,我又想通过代码控制颜色,所以我想完整的保存为 ...

  6. Android 中保存全局变量

    作者:silence鼬.2015年6月28日 在学习Android的时候一直未context的问题认为头疼,由于想做一些工具类,可是又不是四大组件.总要来回传递context.认为非常麻烦,就想全局获 ...

  7. cxf WebService设置wsdl中soapAction的值

    用cxf开发一个WebService很简单,只需要下面几步: 1.定义接口 public interface HelloService { String hello(); } 2.实现 public ...

  8. 一个简单的Webservice的demo(中)_前端页面调用

    首先新建项目,这里有两种调用方式,为了能方便理解,新建页面WebserviceTest如下图: 先引用写好的服务,这里用上次写好的服务.见上次写的一个简单的Webservice的demo,简单模拟服务 ...

  9. ajax请求webservice的过程中遇到的问题总结

    前台用ajax的post方法,无法请求到webservice中的方法的时候,需要在配置文件中添加 web.config文件中的 <system.web> 节点下加入:<webServ ...

随机推荐

  1. matlab从曲线图提取数据

    同学用肉体一顿饭让我帮他做下这个DDL 样图是一张非常扭曲的三虚线图他甚至想OCR识别x轴y轴坐标单位 上谷歌查了查,对于曲线图提取数据基本上是手动在曲线上取几个点,然后由这个几个点开始遍历领域点,判 ...

  2. SQL server中如何按照某一字段中的分割符将记录拆成多条

    现需要将上结果转换为下结果 上结果查询语句:SELECT TOP 1 id,domain FROM dbo.SimpleTask 下结果转换语句:SELECT  a.Id,b.domain FROM ...

  3. `vue-router`的`History`模式下的项目发布

    背景 脚手架版本号:vue cli 3.x 项目路由:vue-router的History模式 原理:url路由处理逻辑从后端转移到前端. 参考:https://developer.mozilla.o ...

  4. 初识redux走向redux-react

    废话不多说,先上一张图 首先记住redux设计思想 Web应用是一个转态机,视图与转态是一一对应的 所有的转态,保存在一个对象里 1.store 存储数据的容器,整个应用只有一个state,Redux ...

  5. vs code 格式化vue代码

    1.安装 vetur 2.文件-首选项-设置 增加 "vetur.format.defaultFormatter.html": "js-beautify-html&quo ...

  6. 【BZOJ】 1041: [HAOI2008]圆上的整点

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 ${x^{2}+y^{2}=r^{2} }$ ${\Rightarrow y^{2} ...

  7. 学习笔记78—三大统计相关系数:Pearson、Spearman秩相关系数、kendall等级相关系数

    ****************************************************** 如有谬误,请联系指正.转载请注明出处. 联系方式: e-mail: heyi9069@gm ...

  8. nc(NetCat)命令

    瑞士军刀netcat官网:http://netcat.sourceforge.net/ 安装:yum install -y nc查询:rpm -q nc 语法:nc [-hlnruz][-g<网 ...

  9. Batchnorm

    Internal Covariate Shift:每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难(神经网络本来就是要学习数据的分布,要 ...

  10. OO-第一单元总结

    经过了前三次作业和两次实验的引导,我的编程思路在逐步从面向过程转向面向对象.也对面向对象有了初步的理解.虽然第一次实验由于自己没有及时完成导致没有提交过有些遗憾,但是第二次实验还是提交了几次的(虽然由 ...