随笔分类 - ASP.net
摘要:先告诉大家一个秘密,EF在使用 update-database 时候,使用的连接字符串来自于解决方案中的“启动项目”,而不是你在包管理器中选择的“默认项目”
0x01. 先说错误,方便大家检索到
开发环境,VS2015+MySql+EntityFramework6
EF在使用包管理器执行命令的时候,所有的配置都使用解决方案中”启动项目“的配置文件(app.config or web.config)。而不是EF所在项目的配置文件。
阅读全文
摘要:目前已归档公文查询现状
a) 数据库结构不合适。由于需求要求每个用户只能查询自己能查的公文,但标识一个公文可以被哪个公司、部门或个人可查的字段,却不存在,必须使用Like语句来匹配,极大的增大了表的扫描范围,增大了数据库IO、内存开销,降低了查询速度。
b) 查询结果集取出全部数据,直接导致数据库IO、内存、网络资源增加。同时由于在WebService层创建完所有对象后,再进行分页,然后取出指定一个页面的结果集返回,使数据流的使用效率几乎为0。
阅读全文
摘要: 朋友说开发电信的MMS,其实需要图片作为附件放在调用WebService接口上,使用Http的Content-Type: Multipart/Related;来发送,真让人感觉不伦不类的。不知道为什么不设计成一个字段是BASE64编码得了呗。
难道只能用朋友说的拼字段的方法了不? 我用Reflect分析了一下,貌似这样也可以实现。
我们知道,我们添加一个WebService引用时,会自动生成从 SoapHttpClientProtocol 的子类。我的想法是,我们写一个 继承自"SoapHttpClientProtocol” 的子类SoapHttpClientProtocolEX, 重写方法:GetWebRequest() 返回我们写的代码 HttpWebRequestEx类,然后在原始 HttpWebRequest 类的GetRequestStream()时,返回我们的流转移器:NetwordStreamEx ,并在方法关闭流 Close() 前,加入自定义的附件信息。
阅读全文
摘要: 网上很多地方介绍了如何用SharePoint.OpenDocument打开基于WebDAV协议的Word文档,可是打开后,如果对文档进行一些设置操作,却苦于没有Word对象。
我这里实现了得到Word.Application对象,可以进行设置文档域一类的操作了。
可是,我本来想得到文档的保存事件并激活我的处理函数,目前这里卡住了,貌似没有出路。
阅读全文
摘要: 上一篇文章 "无侵入方面编程-用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下测试通过.
阅读全文
摘要: 在执行SQL语句时,有时我们必须使用Like语句,还需要动态依条件拼出SQL然后执行。此时你可以会因为一点点麻烦而拒绝使用参数化SQL,其实一点也不麻烦。
阅读全文
摘要: 在异架构间通讯时,我们一般会采用WS。我遇到的情况是WSDL已经由AXIS生成,我需要用Dotnet实现服务器。
简单实现后,发现里面的 NotifySOAPHeader 总是取不值,添加 SoapUnknownHeader[] 后,里面有值。可见是不能识别AXIS发送来的SoapHeader。本文尝试解决了这个问题,避免了为Java调用时写代码从SoapUnknownHeader中取数据了。
阅读全文
摘要: 如果你的项目要求你的程序对高达几万条的数据在集中的时间内执行固定序列的操作,且不能完全使用存储过程时而需要使用程序来执行时。会需要这些优化。
我们知道,SQL服务器对一条语句的执行,需要分析、编译、执行这些步骤,通过参数化我们可以对一种命令只分析和编译一次,而执行多次,从而提高效率。在执行时,如果每次提交语句,可以完成多条SQL语句,则可以减少通讯时间,也可以提高效率。
通过 System.Data.IDbCommand.Prepare() 方法,我们可以在第一次执行语句时,分析和编译SQL语句,然后保存这个Command对象,下次使用时,直接设置参数执行。这个方法对Oracle和MsSql Server都有效。
如果执行一批语句,在T-SQL和PLSQL中有一点不一样。
在T-SQL中,多条SQL语句之间,使用分号";"分隔就行。
delete from TableA where id = @id;update TableB set Name=@name where id=@id
而在PLSQL中,则需要
阅读全文
摘要:因工作需要,又使用了VS2003,但在使用时,鼠标悬停时,就是不出现任何提示。在看别人的代码时太累了。网了查了半天也是需要重装VS2003一类的。我发现了一个貌似可以的简单解决方法。 打开VS2003,在[工具/选项/文本编辑器/C#/常规]中,有语句结束的相关设置,你需要做的就是把“自动列出成员”和“参数信息”前面的勾去掉,确定。 然后再用相同的方法把它打开。 我的经过这...
阅读全文
摘要: 动态控件,复合控件,相信大家都已经很熟悉了。只要达到同样的展示及功能,用什么样的方式实现应该取决于实际情况。我在一个项目中遇到的情况是:已经有了很多页面,但每个页面都没有用Validation控件来验证输入的有效性。
为了达到相同的展示效果:
常规办法:是为每个页面的每个TextBox有选择的生成RequiredFieldValidator、RangeValidator、 CompareValidator、RegularExpressionValidator、FilteredTextBoxExtender。但这个方法,需要每个页面都去添加,并且统一调整起效果来,工作量太大。
复合控件:是写一个复合控件,依参数来添加验证控件。这个也需要在页面中统一添加一次(工作量约为第一个办法的1/3),还需要更改一下后台的控件类型声明(我的后台代码在另一个程序集中)。
动态控件:写了个直接继承自TextBox的控件,在适当的地方,依参数来添加验证控件。这个也需要在页面中统一改动一下(工作量和复合控件的方法相当),不过,后台的代码不用做发改
阅读全文
摘要:如果非要用CustomValidator+WebService+asp.net ajax进行验证,这里给出也一个实现的方法。还贴出了一个常规的做法!
阅读全文
摘要:上次写了HqlBuilder,实现了用一个Filter类,来描述要生成的查询.但在列表时,我们不应该把所以的东西都列出来,我们应该只列一页的数据,往往是10条就足够了.所以,在很多页面使用了Filter来查询的情况下,如果对每个函数都加上参数,来传递要第几页的几条数据时,改动会很大. 我想到,一般情况下,一个页面只有一个查询.(我的项目中如此,具体问题具体对待).这样我们可以在一个Http交互中,...
阅读全文
摘要:最近在使用NHibernate时,发现有的列表无法绑定,如提示如下的错误: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->[TargetException: 对象与目标类型不匹配。] System.Reflection.Runtime...
阅读全文
摘要:由于采用Ajax.Net技术,要求客户不能用浏览器的后退来导航,因为这样会产生不正确的页面.因为有时,结果是Ajax查询返回的,不会保存住. JQuery是一个好东西,可以很方便的给每个 <A> 加上事件,来重写它的默认的跳转,我们把它改成单击时,调用Location.replace来完成页面切换. 代码如下: Code Code highlighting produced by Actip...
阅读全文
摘要:程序代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> ...
阅读全文
摘要:在使用NHibernate中,经常使用查询,又不愿意去写,就写了这个东东,依对象的属性,通过反射来生成查询。 先来看一下使用方式: 一个Filter类: Code Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> public class U...
阅读全文
摘要:要实现一个类似框架结构,有头有尾,中间部分要分菜单、分隔条和内容三部分。
写好的效果图如下:
阅读全文