摘要:
上一篇文章 "无侵入方面编程-用HttpModule+SoapExtension监视页面执行参数(一)"中,我们实现了监视每个页面的执行情况和调用WebService的简单信息。
这次我们继续深入一下SoapExtension的应用,在不改变Soap的WSDL文档的情况下,配合在Dotnet编写的WebService站点配置我们编写的SoapExtension,来穿透传输我们自定义的数据对象。由于SoapExtension是全局的,我们还要加一些标识来区分服务器是否已经配置了我们的SoapExtension,从而不影响其它的WebService调用。
在SoapExtension中,我想到有两种方案:
一种是直接在SoapMessage.Headers中插入自定义的SoapHeader对象,然后在客户端的序列化后,从SoapUnknownHeader中取出数据,然后反序列化成自定义的对象。
第二种是对SoapMessage.ContentType 添加一个额外的标识,在另一方检测这个标识,来从流中取出自己长度的数据。反序列化成自定 阅读全文
摘要:
先简单介绍一下项目吧,我们这个项目是用VS2003开发的,老早一个项目。WEB前端机+业务处理(WebService层)+数据库分别布置在不同的计算机上。
现在老总有一个需求,要统计出每个页面的执行时间,以及每次调用过哪些WebService方法,调用的时间等参数。
可行的方案有好多,但我感觉使用HttpModule+SoapExtension,可以不在改变目标系统源码的基础上,完成这项工作。也许有一天,老总说,现在不需要再统计了,我就直接配置一下,不再统计就行了。
由于要调用WebService,我们采用编写一个SoapExtension,在它的ProcessMessage函数中,在message.Stage是 BeforeSerialize 时,记一个开始时间,并采集一些数据,在message.Stage==AfterDeserialize时,再采集一些时间等数据。最后通过HttpContext.Current.Items[WSInvokeMonitorKey]获取HttpModule的对象,把采集到的数据放在HttpModule里 阅读全文
摘要:
在网速慢或者网站反应慢的情况下,如果提交表单需要超过5秒的时间还未提交成功,多数人会重新点击提交。这样不仅造成错误的数据,还会加剧服务器的压力。
通过使用HttpModule,我们可以在表单处理前,检测一些标志,从而防止用户重复提交数据,再通过一些接口,让用户自己来处理重复提交时,应该如何告诉用户。
通过使用HttpModule,我们也可以在客户端表单提交时,使用DIV覆盖住表单,从UI层防止用户再次单击提交(用户直接F5管不了)。
下面是实现代码:
阅读全文
摘要:
一个类似QQ的分组菜单
支持初始化时自动打开指定的菜单项
IE下测试通过. 阅读全文
摘要:
接触到一个老的项目,里面大量使用OleDbConnection进行数据库操作,在执行SQL块语句时,对它的顺序参数、命名参数很不了解。据说不能使用命名参数,但我这里试验了一下,好像是可以的,只是对参数的顺序还是有要求。看看你能知道下面的输出结果吗?
测试环境:OleDbConnection+Oracle10G
阅读全文
摘要:
一个数据缓存,一般由数据来源,缓存方案,缓存读取来完成,现在有了匿名函数,可以把获取数据来源变为匿名函数。这样就可以直接声明一个缓存:
protected static CacheManager companyCache = new CacheManager(new SmsDatabaseCache(), (key) =
{
return SmsDatabase.Instance.Context.Company.Where(c = c.ShortNumber == (string)key).SingleOrDefault();
});
SmsDatabaseCache是一个缓存方案,还可以使用SimpleCache,TimeoutCache等实现了ICache接口的类,因为我的ICacheManager从ICache继承,所以还可以实现级连缓存哟
阅读全文
摘要:
有朋友说加载这样的XML失败,我试了一下。 阅读全文
摘要:
昨天申请了中国银行的网上银行,发过来一个E-Token,刚开始还以为要插到电脑上,到单位一用才知道,原来是动态密码生成器,直接输入显示的密码就行了。 可是,这个东西,不会和服务器有通讯吧?仔细想了一下,感觉应该是一组算法,应该和时间同步。只是时间差距差几分钟,会很正常的吧?于是我依次把它生成的密码记下来,然后过几分钟后,再输入几分钟前的密码。试验证明4分钟前是可以的,也就是时间差差... 阅读全文