Enterprise Services中遇到的问题
摘要:Enterprise Services中遇到的问题最近准备把《C#高级编程》里边没有看的一些章节看完,甚至由此痛恨板砖,并提出“书非拆不能读也”的座右铭。以下是我读.Net Enterprise Services一章,并尝试写Demo时遇到的问题。创建程序集注意事项 1、要创建库应用程序,而非控制台或者WinForm应用程序等可执行的应用程序; 2、类要继承自ServicedComponent; 3、程序集特性要放在命名空间上面; 4、类要有公开的默认构造函数;强命名 强命名要选用不带密码的.snk文件而非代密码的.pfx类型。客户端 .Net客户端要引用.dll程序集(从开发位置...
阅读全文
防止并发修改 之 离线乐观锁代码示例
摘要:防止并发修改 之 离线乐观锁代码示例(菜鸟必读)背景小明和小强同时签出了源代码,如果小强先提交,那么提交成功是合理的,接着小明提交了修改,这时源代码服务器就会告诉小明有人在他读取之后做了修改,问他如何处理,源代码服务器会让小明把修改合并后再提交。这就是乐观锁策略,当然源代码服务也可以配置为悲观锁以避免并行修改。合理的规避并发修改是企业应用中不能回避的问题,但现实场景是,很多团队都回避这个问题。今天我介绍一下如何使用离线乐观锁处理并发修改。相关文章:再谈在线悲观锁、离线悲观锁、在线乐观锁和离线乐观锁。思路CAS:Compare And Swap,只有当要修改的值在我读取后没有被修改,才会被交换(
阅读全文
超级灵活方便的应用程序设置管理API
摘要:YbSoftwareFactory 代码生成插件二次开发【十二】:超级灵活方便的应用程序设置管理API 通过应用程序设置可以动态存储和检索应用程序的属性设置和其他信息。应用程序设置是提高应用程序灵活性的必备手段之一。通常的应用程序设置可写人数据库、配置文件(如Web.Config的"appSettings"配置节)和Properties.Setting(WinForm、WPF客户端可选)等。 本文要介绍的应用程序设置管理采用数据库存储的方式,实现了如下的目标: 1、支持多种数据库,同时预留接口,用户可对API进行灵活扩展,支持如XML等任意形式的存储方式。 2、支持多应用程
阅读全文
C#性能优化实践 1
摘要:学习下 C#性能优化实践 (一)根据经验,99%的性能消耗是由于1%的代码造成的。所以,大部分性能优化都是针对这1%的瓶颈代码进行的。具体实施也就分为两步。首先,确定瓶颈,其次消除瓶颈。切忌过度首先必须要认识到,性能优化本身是有成本的。这个成本不单单体现在做性能优化所付出的工作量。还包括为性能优化而写出的复杂代码,额外的维护成本,会引入新的Bug,额外的内存开销等。 一个常见问题是,一些刚接触软件开发的同学会对一些不必要的点生搬硬套性能优化技巧或者设计模式,带来不必要的复杂度。性能优化常常需要对收益和成本之间做出权衡。如何发现性能瓶颈上一节提到,性能优化的第一步就是发现性能瓶颈,这一节主要介绍
阅读全文
ASP.NET的一些坑
摘要:ASP.NET的一些坑阅读目录开始HttpContext.Current并非无处不在Application_Start的异常与IIS经典模式QueryString,Form允许重复的KEYashx的重用问题当前登录用户信息有时获取不到Timer可能会不起作用Session与复杂数据类型DateTime的JSON序列化招聘信息前段时间碰到一个问题:为什么在ASP.NET程序中定时器有时候会不工作?这个问题看起来很奇怪,代码好像也没错,但就是结果与预期不一致。其实这里是ASP.NET程序的一个陷阱,我习惯说成坑。 后来想想,其实ASP.NET的坑何止这一个,我今天就把我能想到的各种坑都写出来,希望
阅读全文
原子性
摘要:.NET(C#):再议值类型 - 原子性两年前我曾经写过一篇讲理解值类型,引用类型的文章,主要是讲常见的值类型,引用类型的区别。但是这两种类型的渊源不止那些,今天就说说值类型在线程方面的原子性问题。目录0. 概念阐述1. 使用Interlocked类型2. 使用引用类型来声明3. 通过装箱和拆箱4. 使用lock返回目录0. 概念阐述首先我想专门强调一下,“原子性”和“线程安全”属于容易混淆的概念,解决了“原子性”不等于解决了“线程安全”,但是如果连“原子性”都没有保证,那么肯定不是“线程安全”的。“原子性”属于“线程安全”考虑的一个范畴,本文也仅仅是讨论“原子性”问题。根据C#语言标准的描述
阅读全文
.NET开发丰富的公共类库助你事半功倍
摘要:.NET开发丰富的公共类库助你事半功倍(供下载免费使用)(干货).NET开发丰富的公共类库助你事半功倍(供下载免费使用) Good company on the road is the shortest cut.(行路有良伴就是捷径)。作为开发人员(苦逼)经常都在为一些常用的操作Baidu,Google,既耗时,又浪费青春,更没时间谈恋爱,苦逼就是这么来的。开发久了,我相信很个人身上都有自己的一套公共操作类库,不管多少,丰富与否,确实应该有那么一点儿。这是一种积累,知识的积累,积累的东西就要与人分享,放在自己硬盘,太可惜了。固步自封,走得很远比较难,话虽重了点,但确实是实话。我分享的多不多..
阅读全文
国内邮箱服务器严重漏洞
摘要:国内邮箱服务器严重漏洞这几天学习了下邮箱服务器及邮件协议,发现了不少问题,于是就测试了一下各个大型邮箱服务商的服务器。(这个问题应该之前也有人发现的,可能我没找到把)经过测试发现了一个非常严重的问题(至少我觉得已经非常严重了),就是可以完全伪造任何人的邮箱地址发送邮件,比如:system@163.com 发送给除163邮箱的大多数邮箱。我测试了QQ、网易、新浪三家的邮箱服务器,都没有做任何的验证(腾讯的稍微好点)。我先说说这个漏洞存在哪里,首先邮箱服务器之间的通信,比如下面这个:A 发送服务器 B接收服务器A:链接BB:220 Welcome to Happy you and me SMTP
阅读全文
插件框架实现
摘要:一步步实现自己的框架系列:插件框架实现 不好意思各位同学,本系列文章更新比较慢,因为我也要工作,况且还需要抽出时间编码验证理论,当然找借口总归是不好的,我们都是人,需要休息与娱乐嘛。 其实.net平台已经有自己的插件框架,比如MEF,MAF这些都是.net自带的框架,前者注重灵活,后者注重物理隔离。不过这不是今天的重点,今天的重点是做我们自己的框架。 第一步:插件模型设计 既然是插件框架就会有插件,就会有放插件的地方,我们就需要设计插件容器,这样既可以灵活的管理插件,也使代码的层次结构更加清晰,图示紫色部分是插件与插件容器部分,外边蓝色的就是我们需要使用插件的拥有者,我发现一张图片的效果...
阅读全文
Aspose Word模版使用总结篇2带示例
摘要:Aspose Word模版使用总结篇2带示例继上篇:Aspose Word模板使用总结9.创建word模版,使用MergeFeild插入图片10.插入图片示例 string tempPath = Server.MapPath("~/Docs/Temp/Template.doc"); string logoPath = Server.MapPath("~/Content/logo.jpg"); var doc = new Document(tempPath); //载入模板//提供数据源 String[] fieldNames = new String[]
阅读全文
C#开发之Word批量转PDF
摘要:C#开发之Word批量转PDF微软Office Word本身已经提供了另存为PDF文档功能,对于少量文档,手工使用该方式进行Word转换为PDF尚可,一旦需要处理大量的文档,可能就显得有些捉襟见肘了。不过对于已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF了。源码奉上:?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
阅读全文
对ServiceStack.Redis的连接池进行故障转移改造
摘要:对ServiceStack.Redis的连接池进行故障转移改造使用ServiceStack.Redis的连接池在操作多台Redis的时候并不会对出现故障的Redis进行排除切换,这样就会导致应用会还是会分配到故障的Redis服务中导致应用处理错误.这次对ServiceStack.Redis连接池的改造主要实现两个功能:1)对故障的Redis服务在轮循的时候排除,2)定期检测故障的Redis服务,如果服务正常则恢复到轮盾环节中.(ServiceStack.Redis的代码结构还是很不错修改起来也很方便)增加基于Host的连接池功能ServiceStack.Redis连接池的连接存储结构相对简单,
阅读全文
重构之践
摘要:重构之践上个月个人有机会重构正在开发的一个系统代码,在完成后团队使用中还有效果的情况下,觉得有必要将总结一下。简介 这个系统功能是一个工业设计软件,通过一些参数的配置,自动生成客户所需要的模型。采用C#开发,winform系统,该系统现为单机版,不存在服务端开发。其代码实现主要是模型生成,数据库参数读取都相对简单,现阶段代码量不是很大,配置界面大概有十个左右,业务操作代码估计有一万五左右吧。开发模式主要是敏捷开发,前期对系统进行简单设计,具体详细设计主要是由编码人员实现。原因由于该系统正在开发中,不易系统新增功能,甚至有些功能无法新增;核心功能修改困难,只有开发自己可以修改;该系统是公司计划.
阅读全文
通用泛型存储接口的设计
摘要:通用泛型存储接口的设计Repository模式,在领域驱动设计中用的比较多,构建通用的存储接口,可以大大提高代码的重用,释放出更多的时间去处理核心业务。也就是说存储只依赖这些通用的存储接口即可完成基本存储操作,不需要去为每个业务存储去添加简单的增删改查。=》提取共性,关注个性。存储接口设计: /// <summary> /// 默认存储接口 /// </summary> /// <typeparam name="TEntity">模型对象</typeparam> public interface IRepository<
阅读全文
[C# 开发技巧系列]如何动态设置屏幕分辨率
摘要:[C# 开发技巧系列]如何动态设置屏幕分辨率因为最近在MSDN论坛和stackflow中看到一些朋友经常问到这个问题,所以写这篇文章来帮助大家遇到相同问题的时候可以很快的得到解决,下面就不啰嗦了,直接看代码如何解决这个问题的。首先,大家应该明确,现在没有可用的API来给我们动态地设置屏幕分辨率,我们要实现这个需求,我们只能在C#程序中调用Win32 API函数来解决这个问题的,这里用C#代码调用Win32 API 就涉及到一个问题的,即.NET 互操作性的问题,关于这个大家可以参考我的互操作性系列文章。这里我就不过多解释了。我们要解决这个问题,首先大家肯定也会遇到一个经常遇到的问题,即如何获得
阅读全文
排序、搜索
摘要:排序、搜索上周六,写了第一篇博客《订餐系统之权限设计》,在此感谢那些鼓励、关注我的园友们,更要感谢那些提出宝贵建议的朋友们。看了你们的评论,才真切的感受到:朋友们的评论往往会让文章更有看点。上篇文章中郑明、人生就是赌等几个园友的留言让我对我们系统的权限优化有了方向。当然,这样的优化肯定不是一天两天的事,做技术的朋友应该都知道:一个难题经常啃啃,某天也许就有了好的方案了(近段时间啃掉了几个2、3年前未处理好的的问题,才想起初中数学老师让我们经常啃一些竞赛题的良苦用心),今天的文章说的就是一个从2010年就想优化,但一直未优化好的功能,也从幸福框架的评论中,看到了他的博客,更是从他博客的留言中,找
阅读全文
数据库脚本工具 VS2010/2012风格的界面框架
摘要:数据库脚本工具 VS2010/2012风格的界面框架工作中遇到的问题,经常会在网络上搜集一些相关的内容,以此扩展以解决相同性质的问题,StackOverflow,CodeProject,CodPlex是我经常查找内容的网站。以下分享我找到的一些比较有典型意义的程序,列举工作中中可以能会遇到的场景和解决方法。SQL Server Runner网址:http://www.codeproject.com/Articles/22882/SQL-Server-Runner-Part-1分类: 数据库实用工具工作中经常会遇到,新增表或新增字段,像下面的SQL语句片段这样IF NOT EXISTS(SELE
阅读全文
ServiceStack.Redis的PooledRedisClientManager
摘要:ServiceStack.Redis的PooledRedisClientManager蛋痛的设计PooledRedisClientManager是ServiceStack.Redis的连接池管理类,通过连接池可以实现更高效的Redis操作.但PooledRedisClientManager相关GetClient的设计似乎存在一些问题,如果你只Pool只指向一台Redis这倒不会有什么问题,但如果指向多台Redis那就可能产生悲剧的事情.下面解释一下指向多台Redis存在的一些问题.具体代码 1 /// <summary> 2 /// Called within a lock 3..
阅读全文
NSubstitute完全手册索引
摘要:NSubstitute完全手册索引NSubstitute 是什么?NSubstitute是一个 .NET Mocking 类库。一直以来,开发者对 mocking 类库的语法的简洁性有强烈的渴望,NSubstitute试图满足这一需求。简单明了的语法可以让我们将重心放在测试本身,而不是纠缠在测试替代实例的创建和配置上。NSubstitute 已尝试将最常用的操作需求简单化、易用化,并支持一些不常用的或探索性的功能,与此同时还尽可能地将其语法向自然语言靠近。NSubstitute 是为Arrange-Act-Assert (AAA) 模式的测试进行设计的,所以你仅需 Arrange 测试应该怎样
阅读全文
工具 Dotnet IL Editor 推荐
摘要:工具 Dotnet IL Editor 推荐Dotnet IL Editor是一款.NET平台反编译工具,可以反编译.NET程序集文件为IL代码,并且可以执行,调试反编译后生成的IL代码。它的设计出发点比较直观,新建一个项目,添加程序集文件,设置断点(F9),然后就可以调试反编译后的程序集文件,Step Into,Step Out均可,以此原理,可以找到系统的瓶颈代码,也可以深入的学习MSIL微软中间语言。先建立一个C#控制台项目,设计一个数字相加的方法,并在Main方法中调用它程序总共不到10行,把数字1和2相加,输出到控制台。 public class TestEditor { ...
阅读全文