分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

.net webService保存全局变量中

发布时间:2023-09-06 02:26责任编辑:傅花花关键词:暂无标签

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

情景:通过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 == 0) ???????????{ ???????????????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保存全局变量中

原文地址:https://www.cnblogs.com/yuanjiedao/p/10137837.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved