.net webService保存全局变量中
遇到坑,然后找到解决方案,我就习惯做个记录。
情景:通过webservice调用一个第三方的库,在初始化第三方库的时候需要花费较长时间
目的:希望通过初始化一次,缓存下来,下次直接调用,而不必每次初始化。
处理思路:在web项目中添加全局应用程序类(Global.cs),通过其Application_Start事件完成初始化,初始化后保存到一个静态类文件的静态对象中,需要的时候从静态对象中获取。
技术预研:
预研一、使用字符串作为初始化的对象,达到预期目的,能存能取。
预研二、使用第三方对象作为初始化对象,能存不能取。发现每次调用webservice方法时:
a.Application_Start事件会被触发,造成每次都初始化。
b.之前初始化的变量为空。
不甘心,以为是初始化缓存方法不对,然后尝试了Application、HttpContext.Chache灯方式来存储初始化对象,得到相同的结果。
结论:事实似乎证明:使用基本的数据类型成功,使用其他对象类型不成功,复杂的数据对象(这里指的是第三方的对象)会造成微博webservice的每次调用都重启应用(即:触发Application_Start事件)。
后来尝试将复杂对象保存到数据字典中,居然成功了。
终极结论:
在使用webservice保存全局变量的时,遇到复杂对象,需要将对象嵌入到数据字典(Dictionary)中,否则会触发webservice 应用重启。
记住,在初始化的方法里面,不能出现其他复杂变量的引用,否则又会悲剧。
下面是代码:
public class Global : System.Web.HttpApplication
{ protected void Application_Start(object sender, EventArgs e)
{
if (AppContext.toolDic.Count == )
{
AppContext.InitQueueToolsDic();
}
}
}
public static class AppContext
{ #region 初始化 QueueTools,使用 AppContext.toolDic["QueueTools"] 获取到初始化后的实例
/// <summary>
/// 初始化字典
/// </summary>
public static Dictionary<string, QueueTools> toolDic = new Dictionary<string, QueueTools>();
/// <summary>
/// 初始化队列对象,添加到字典
/// </summary>
public static void InitQueueToolsDic()
{ //writelog("初始0 ");这里不能写日志,因为写日志的方法里出现复杂变量会造成服务重启
string ConfigFile = AppDomain.CurrentDomain.BaseDirectory + "bin\\esbmqsdk-config.xml";
var queueTls = new QueueTools(ConfigFile);
toolDic.Add("QueueTools", queueTls);
}
#endregion 初始化 QueueTools
}
.net webService保存全局变量中的更多相关文章
- 用NSData和NSFileManager保存内存中的对象
曾经接触过iOS开发,并且开发过两个应用,纵然青涩,也算是一断美好的回忆.转眼就已经一年多了!现在回过头来决定再次拿起iOS开发. 下面讲NSData: NSdata的概念 1.使用文件时需要频繁地将 ...
- c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”
ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述 相关代码 using System; us ...
- webservice 从客户端中检测到有潜在危险的 Request.Form 值
webservice中传递xml格式的参数时报错 webservice 从客户端中检测到有潜在危险的 Request.Form 值解决方案: 1.在web.config的system.web节点中添加 ...
- react 如何处理页面加载时无法将获取缓存信息存入全局变量中
最近在做一个权限功能时,发现在读取用户公司ID进行列表查询 时,无法钭读取到缓存中的数据存入页面全局变量中进行加载查询 将问题代码整理出来 将信息存入缓存: let menuList = Helper ...
- 保存TextBox中的文字为Path功能
保存TextBox中的文字为Path功能 今天再设计一个我自己程序的Icon时使用了Path+textbox做了图形,我不想导出为PNG,因为颜色比较单一,我又想通过代码控制颜色,所以我想完整的保存为 ...
- Android 中保存全局变量
作者:silence鼬.2015年6月28日 在学习Android的时候一直未context的问题认为头疼,由于想做一些工具类,可是又不是四大组件.总要来回传递context.认为非常麻烦,就想全局获 ...
- cxf WebService设置wsdl中soapAction的值
用cxf开发一个WebService很简单,只需要下面几步: 1.定义接口 public interface HelloService { String hello(); } 2.实现 public ...
- 一个简单的Webservice的demo(中)_前端页面调用
首先新建项目,这里有两种调用方式,为了能方便理解,新建页面WebserviceTest如下图: 先引用写好的服务,这里用上次写好的服务.见上次写的一个简单的Webservice的demo,简单模拟服务 ...
- ajax请求webservice的过程中遇到的问题总结
前台用ajax的post方法,无法请求到webservice中的方法的时候,需要在配置文件中添加 web.config文件中的 <system.web> 节点下加入:<webServ ...
随机推荐
- iOS QQ 扫一扫 捷径URL
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Lintcode225-Find Node in Linked List-Naive
225. Find Node in Linked List Find a node with given value in a linked list. Return null if not exis ...
- CentOS7.4用yum安装并配置MySQL5.7
1.配置YUM源 下载MySQL源安装包 wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 安装MySQ ...
- 【MVC】ASP.NET MVC之数据验证
前端传到后端数据的不可信任性,DRY("Don't Repeat Yourself") 设计原则.MVC3.0出了后端数据验证特性,鼓励你只定义一次功能或行为,然后在应用程序中各处 ...
- setTimeout setInterval 计时器
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 返回值:返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 来取消执行. 案例: 点击按钮开始,停止时 ...
- 显示等待 (web自动化测试)
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from sel ...
- conda环境复制
配置环境是一个很烦的事,有时候用到服务器需要一遍又一遍的配..太麻烦了,这时候就要用到conda,直接复制已有的环境.事半功倍. 第一种方法:地址复制 首先找到要复制的环境的路径:conda info ...
- C++标准模板库(STL)之Stack
1.Stack的常用用法 stack:栈,一个后进先出的容器. 1.1.stack的定义 加上头文件#include<stack>和using namespace std; stack&l ...
- Angular2+ 编译后部署到服务器上页面刷新404问题
原因:NG2+ 会默认不显示URL后面的文件名 解决方案:使用LocationStrategy方式,然后把URL后的# 替换成index.html# app.module.ts import {Has ...
- test--2
$(function () { if (isLogined && !c_has_follwed) { $.ajax({ url: "/mvc/Follow/Fol ...