[09] C#
机器人
喜欢编程,喜欢篮球
展开
-
【WPF】MVVM模式下的输入校验(IDataErrorInfo + DataAnnotations)
【前言】Windows Presentation Foundation (WPF) 具有一个丰富数据绑定系统。除了作为通过 Model-View-ViewModel (MVVM) 模式从支持逻辑和数据对 UI 定义进行松散耦合的关键推动力之外,数据绑定系统还为业务数据验证方案提供强大而灵活的支持。WPF 中的数据绑定机制包括多个选项,可用于在创建可编辑视图时校验输入数据的有效性。.mytable原创 2012-11-17 23:45:40 · 18341 阅读 · 8 评论 -
【WCF】自动加载 WCF Library
在论坛里遇到一个问题:如何做一个主程序,主程序里没有任何契约和配置文件能自动Host指定的外部的WCF Library Assembly。其实Visual Studio已经提供了类似的玩意,在你创建一个WCF Library工程之后在项目属性 -> WCF Options -> 会看到一个 "Start WCF Service Host When debugging anther project原创 2011-12-28 01:39:35 · 6195 阅读 · 19 评论 -
.NET Winform 开发小贴士
将一些有用的实例整理出来,供参考。FAQ形式,整理多少记多少。【目录】如何制作安装包能在Menu菜单中添加卸载菜单如何让应用程序只能启动1次如何让DataTable.WriteXml保存的Xml加上Encoding申明如何读取两个以上的游标?(DataReader.NextResult)将Form加到另一个Form里如何在项目中引用exe路径以外的dll如何在windows service里运行"原创 2010-10-28 22:34:00 · 5081 阅读 · 1 评论 -
利用 RazorEngine 打造简单的泛用代码生成器
自从 ASP.NET MVC 3 推出来之后,其中最大的亮点当数 MVC 3 里的 Razor 页面引擎。用 @{ } 取代了以前的 ,简洁的语法让开发者赞不绝口。和 MVC 开源一样,Codeplex 上也开源了这个引擎:RazorEngine , 熟悉MVC开发的童鞋都知道这其中的奥秘,主要是使用了.NET 4.0 dynamic 动态对象。然后 RazorEngine 会将 template原创 2011-12-22 00:10:00 · 11378 阅读 · 0 评论 -
WCF4.0 —— Routing Service 自定义Filter控制访问权限
接着上一篇的实例,我们通过Routing Service使用了 filterType="EndpointName" 来转发客户端的请求,映射到内部多个服务上。但问题又来了,比如有2个内部服务A,B。有N个客户端,并不是所有的客户端同时都有对A,B的访问权限,有些客户端可以访问A,有些客户端可以访问B,如何控制客户端请求的权限呢?了解WCF认证机制的童鞋们大多数会想到通过服务A,B自身的认证功能去屏原创 2011-10-30 21:49:45 · 5170 阅读 · 2 评论 -
VS2008 AddIn 开发 – WorkspaceAddIn 实例(支持VS2010)
不知道你有没有遇到这种情况: 当要找一些以前做的代码做参考的时候,总是在文件夹里翻来翻去,光看项目名字也还是想不起来重要的代码究竟在哪个工程里。因此,自己开发个AddIn来方便进行本地的代码管理,通过添加本地的某个文件夹管理下面的所有的Solution。在AddIn里,可以快速切原创 2010-12-06 01:10:00 · 5981 阅读 · 7 评论 -
使用OleDb,将Excel导入DataSet
本方法,将传入的Excel文件内所有的Sheet内的数据都填充入DataSet中。这是一个简单快捷的方法,不足之处是不适合带有格式复杂的Excel文件。(比如:有合并单元格的)public class ExcelUtil{ /// /// 从Excel文件导入DataSet /// Excel的连接字符串说明(详细参看 http://www.connectionstri原创 2005-06-18 14:20:00 · 8834 阅读 · 1 评论 -
WCF中如何修改MaxItemsInObjectGraph的限制
在WCF/WebService中,如果返回值过大,比如Array,List,DataSet等达到一定数量级的话,可能引发下面的异常:WebService代码[WebService(Namespace = "http://tempuri.org/")] [WebServiceBin原创 2010-11-24 01:04:00 · 19826 阅读 · 12 评论 -
.NET 基于Task的异步编程模型
最近下载了Visual Studio Async CTP,体验了下基于Task的异步编程带来的新特性。在CTP中,增加了新的关键字: async, await。尤其是在SL,WP7的编程中,大量使用异步调用的环境里,async, await的确能减少编程的复杂度。看上去像是同步的原创 2011-08-14 03:18:54 · 17757 阅读 · 3 评论 -
HttpWebRequest 二三事
随着REST风格的流行,直接通过 HttpWebRequest 进行服务调用的客户端应用越来越多。这里总结一些可能需要费时调查的经验,希望能帮助大家。原创 2011-04-29 22:20:00 · 6687 阅读 · 0 评论 -
【ASP.NET】 ASP.NET MVC 3 & MEF 2.0
前面一篇介绍了ASP.NET MVC3 和 Unity 结合使用的示例,Unity 通过 Register 方法或者配置注入实例,MEF 则是通过 [Import] [Export] 特性绑定依赖。在 MEF 2.0 中当前 dll 中如果在 *.Parts.* 命名空间下的类型会自动作为依赖源。CompositionProvider.AddPartsAssembly 亦可运行时添加依赖对象,非常原创 2012-01-29 02:27:52 · 3976 阅读 · 0 评论 -
【WCF】自动加载WCF Library (IIS Host)
在之前这篇 Blog (【WCF】自动加载WCF Library) 中介绍了如何在一个desktop应用中自动加载 WCF Library 的简单实现。后来我就想到如果能部署到 IIS 上,用 IIS Host 实现不就更方便嘛。正好最近学习 ASP.NET MVC 碰到这个类:VirtualPathProvider 类 (它提供了一组方法,使 Web 应用程序可以从虚拟文件系统中检索资源。) ,原创 2012-02-21 01:38:24 · 5794 阅读 · 1 评论 -
NuGet 发布 Snippet
就像 Java 的 Maven,.Net 有 NuGet。NuGet 的便利性,这里就不赘述了。而 NuGet 的发布过程也没有想象中的那么复杂,所以希望看到本文的开发者也能贡献更多好用的 Package。1. 注册一个用户NuGet 的官方地址: http://nuget.org/2. 使用 NuGet Packager 你完全可以参考 NuGet 的文档,一步步创建你的 Package。原创 2012-12-07 01:28:33 · 2866 阅读 · 0 评论 -
(开源)RazorSourceGenerator 代码生成工具
项目介绍 这是一个基于Razor Engine的代码生成器,在强大的Razor语法支持下通过编写模板针对数据库的Schema或者一段SQL的查询结果生成代码。(模板使用Razor C# 语法)地址:http://razorsourcegenerator.codeplex.com/ 运行前提: 安装 .net 4.0 client profile 特性: 1. 支持多种主流数据库(因为使用OleD原创 2012-10-18 22:47:58 · 6446 阅读 · 16 评论 -
ADO.NET Entity Framework CodeFirst 如何输出日志(EF4.3)
[示例代码下载]之前写过一篇如何利用 EFProviderWrappers 在EF中增加日志的blog,那篇文章是基于 ModelFirst 来写的,这里在 EF 4.3 CodeFirst 上再次实现。1. 事前准备下载 EFProviderWrappers 程序集(点击此处下载),添加:EFProviderWrapperToolkit.dll,EFTracingProvider.dll 引用。原创 2012-06-15 01:01:10 · 7189 阅读 · 11 评论 -
Reactive Extensions (Rx) 入门(5) —— Rx的事件编程③
原文:http://www.atmarkit.co.jp/fdotnet/introrx/introrx_02/introrx_02_03.html作者:河合 宜文合成用的方法本章将介绍一些Rx代表性的方法。○ SelectMany 方法SelectMany 方法是 Rx 中最常用的方法之一。例如将鼠标移动事件插入鼠标按下事件中,甚至对于序列自身的修改替换。另外,从第一个异步结果中启动第2个异步处翻译 2012-07-18 23:19:29 · 8020 阅读 · 0 评论 -
Reactive Extensions (Rx) 入门(4) —— Rx的事件编程②
原文:http://www.atmarkit.co.jp/fdotnet/introrx/introrx_01/introrx_02_02.html作者:河合 宜文事件是什么?用Rx来处理事件的优势让我们来看看如何用Rx特有的事件Obserable转换事件处理的。在这之前,让我们考虑一下事件在.NET中的应用场景。最具有代表性的应该是GUI的事件了。比如:按钮点击,鼠标移动等,这些全是通过事件来处翻译 2012-06-23 23:33:32 · 7785 阅读 · 0 评论 -
Reactive Extensions (Rx) 入门(3) —— Rx的事件编程①
原文:http://www.atmarkit.co.jp/fdotnet/introrx/introrx_01/introrx_01_02.html作者:河合 宜文前面两章介绍了Rx的概要和安装方法,本章开始重点介绍Rx的具体的使用方法。首先会介绍一下使用Rx的基本操作,然后会重点介绍Rx所代表的2大特性:事件处理和异步处理中的事件处理。基本方法首先来看看最简单的Rx (Observable对象)翻译 2012-06-09 00:39:31 · 10807 阅读 · 6 评论 -
Reactive Extensions (Rx) 入门(2) —— 安装 Reactive Extensions
原文:http://www.atmarkit.co.jp/fdotnet/introrx/introrx_01/introrx_01_02.html作者:河合 宜文安装方法关于 Rx 的安装,可以通过 Reactive Extensions (Rx) 的主页 的直接下载安装,当然也可以利用 NuGet 导入 dll (http://nuget.org/packages/Rx-Main) [译注:翻译 2012-05-22 01:49:29 · 12247 阅读 · 1 评论 -
Reactive Extensions (Rx) 入门(1) —— Reactive Extensions 概要
原文:http://www.atmarkit.co.jp/fdotnet/introrx/introrx_01/introrx_01_01.html作者:河合 宜文众所周知,从 C# 3.0 开始 Linq 大大改变了以往的编程风格,尤其是大幅度简化了大量数据加工这样麻烦的操作。对于各种数据(比如:数组,XML,SQL数据库等)提供了一种统一的语法,也是 Linq 的一个特征。Reactive E翻译 2012-04-15 16:14:12 · 16646 阅读 · 5 评论 -
WCF 学习总结3 -- 实例模式
通过WCF的ServiceBehaviorAttribute设定InstanceContextMode有下面的3中模式: 1. Single —— 表示所有的客户端共享一个会话(服务对象)(服务关闭时才会销毁服务对象) 2. PerCall —— 表示每次调用都会创建一个会话(服务对象)(调用完毕后就会销毁服务对象) 3. PerSession —— 表示为每个连接(每个客户端代理对象) 创建一个原创 2011-01-09 01:13:00 · 7811 阅读 · 9 评论 -
【ASP.NET】 Web Api (.NET 4.5)
在刚刚发布的 ASP.NET MVC 4 中,有一个值得注意的新特性——Web Api,微软官方的介绍是:ASP.NET MVC 4 中包含了Web API 它能够构建HTTP服务以支撑更广泛的客户端,包括浏览器,手机和平板电脑的框架。ASP.NET Web API是非常棒的构建服务的框架,遵循REST架构风格,而且它支持的RPC模式。从 .NET 3.5 开始 WCF 已经支持用 WebHttp原创 2012-03-04 23:29:25 · 25076 阅读 · 16 评论 -
Linq Distinct
Linq 用来实现集合(List, DataTable等) 的二次操作十分简便,这里介绍下用 Linq 对集合进行 Distinct 操作的几种方法。 准备数据: 1. 使用GroupBy:对需要Distinct的字段进行分组,取组内的第一条记录这样结果就是Distinct的数据了。 2. 使用Distinct()扩展方法:需要实现IEqualityComparer接口。 3. 自定义扩展方法DistinctBy(this IEnumerable source,原创 2011-02-15 23:41:00 · 16942 阅读 · 2 评论 -
Remoting CallContext 实现客户端识别
最近整理一个Remoting项目, 需要识别客户端。最先想到的是WCF的MessageHeader,WebService的SoapHeader,抑或是通过消息拦截能够加入额外的信息。 调查了下发现 Remoting 实现消息拦截还比较麻烦(需要实现RealProxy等,详细看这里:http://www.cnblogs.com/idior/articles/872380.html)。 好在 Remoting 里还有个东东叫 CallContext 的东东可以封送额外的信息,调用上下文在应用程序域边界被克隆,其原创 2011-01-29 00:40:00 · 3950 阅读 · 0 评论 -
WCF 学习总结7 -- 流模式(Streaming)实现文件上传
当有大量的数据要传输时,WCF的流模式是比较好的选择,因为流模式不是全部加载到内存后传输而是一边读取一边传输消息,所以流模式改善了系统的吞吐量和响应效率。 需要注意的是当启用了流模式,以下WCF功能无法使用: (1) 无法执行消息正文的数字签名; (2) 不支持Session; (3) 不支持可靠会话。WCF中定义的Binding中支持流模式的只有: BasicHttpBinding, NetTcpBinding, NetNamingPipeBinding, WebHttpBinding 支持流模式。原创 2011-01-26 02:24:00 · 19785 阅读 · 41 评论 -
如何创建.NET Install的MDAC自动监测并安装
如果项目中使用了OleDb那么就会用到MS的MDAC组件。如果版本太低(2.6以下)就会出错。因此在部署应用程序的时候,必须保证MDAC的版本。检测客户端是否符合要求的版本,可以在制作Install程序的时候添加设置,步骤如下:①选择工程的属性②点“Prerequisties...”③把Microsoft Data Access Components 2.8 钩选上原创 2009-01-11 02:07:00 · 1401 阅读 · 0 评论 -
.NET 2.0 - WinForm Control - DataGridView 编程36计(二)
.NET 2.0 - WinForm Control - DataGridView 编程36计(二)目录: ① Error图标表示的设定 ② 单元格入力值得验证③ 用户入力值发生错误时的捕获① DataGridView Error图标表示的设定:GO TO TOP为了提醒用户注意,DataGridView可以使用Error图标来突出显示。如下图原创 2007-10-12 11:03:00 · 11846 阅读 · 2 评论 -
.NET 2.0 - WinForm Control - DataGridView 编程36计(一)
.NET 2.0 - WinForm Control - DataGridView 编程36计(一)目录: ① 取得或者修改当前单元格的内容② 设定单元格只读③ 不显示最下面的新行④ 判断新增行⑤ 行的用户删除操作的自定义⑥ 行、列的隐藏和删除⑦ 禁止列或者行的Resize⑧ 列宽和行高以及列头的高度和行头的宽度的自动调整⑨ 冻结列或行⑩ 列原创 2007-04-11 17:55:00 · 62909 阅读 · 50 评论 -
Visual Studio 2005:为开发小组创建可重用的项模板
在项目开发时,往往需要统一代码风格,包括注释,代码看板等。这里介绍一下使用Visual Studio 2005进行开发时,利用项模板来简化开发:项模板由一个或多个文件(可以是.vb/.cs源文件,vbproj文件,资源文件,数据文件)和一个 vstemplate 文件组成。此文件包含用户选择【新建项目】或【添加新项】命令时Visual Studio所需要的全部元数据。有意义的是,模板存储在压缩原创 2007-03-08 15:28:00 · 2393 阅读 · 0 评论 -
C#读取java的Properties文件
Java从一个byte流中读取一个字符串时,将把平台相关的byte转变为平台无关的Unicode字符串。在输出时Java将把Unicode字符串转变为平台相关的byte流,如果某个Unicode字符在某个平台上不存在,将会输出一个′?′。举个例子:在日文Windows中,Java读出一个"SHIFT_JIS"编码的文件(可以是任何流)到内存中构造字符串对象,将会把"SHIFT_JIS"编码的文字转原创 2007-01-11 21:23:00 · 6607 阅读 · 0 评论 -
用System.Attribute扩展元数据
本文以一个项目中通用的验证类来举例说明如何使用自定义Attribute来扩展元数据。 在项目中,我们为了保证各个层次之间的松藕合,通常把在各个层次之间传递数据的封装在一个称为实体类的类中,比如ActionFromusing System;namespace AttributeTest{ public class ActionForm { private string e原创 2005-10-30 15:29:00 · 4004 阅读 · 3 评论 -
如何调用Oracle PL/SQL(ODP.NET)
以下代码使用的是: System.Data.OracleClient (.NET For Oracle Data Provider),使用1. 如何调用Oracle PL/SQL中有返回值的Function?可以通过Command和Parameter对象匹配调用。添加的Parameter被匹配为返回值和参数,第一个Parameter是返回值,然后都是传入PL/SQL的参数。privat原创 2005-10-17 21:44:00 · 6919 阅读 · 1 评论 -
利用对象序列化深表克隆对象
在.NET上,一切都是对象。这种安排的后果之一就是在当将一个变量赋值给另一个变量的时候,会得到两个指向同一对象的变量,而不是两个不同的数据副本(除非是使用值类型而不是引用类型)。一般情况下,可以通过调用类所公开的一个特殊方法得到一个数据的副本。在.NET世界中,类应当实现ICloneable接口并公开这个接口的惟一方法Clone,让外部调用知道它能够创建类的实例的副本。框架中有多个原创 2005-04-30 17:02:00 · 3636 阅读 · 2 评论 -
使用Thread包装类进行多线程操作
Java中使用接口的方式,实现方法的回调机制。而在.NET里,我们通过代理,能够很轻松的实现方法的回调。class Class1 { [STAThread] static void Main(string[] args) { Class1 c = new Class1(); ThreadWrapper tw = new ThreadWrapper(new Callback(c原创 2005-09-09 14:14:00 · 2894 阅读 · 3 评论 -
在.NET上如何根据字符串动态创建控件
在.Net上用字符串动态创建控件是通过反射来实现。首先,利用System.Type.GetType方法,获得字符串中指定的控件的类型实例。这里需要注意这个字符串的语法,根据msdn的解释:按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 对于反射,属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和原创 2005-07-29 12:47:00 · 7461 阅读 · 6 评论 -
iBatisNet 入门篇(DataMapper)
iBatisNet是一款轻量级的ORM开源框架,配置简单,上手容易。iBatisNet的官方网址:http://ibatis.apache.org/dotnet.cgi iBatisNet拥有两个工程:DataMapper和DataAccess,DataMapper就相当于DAL(数据访问层),提供数据访问的接口。将SQL从原来硬编码中分离到.xml文件中去。查询出来的结果通过原创 2010-03-15 23:31:00 · 6653 阅读 · 2 评论 -
iBatisNet 需要注意的细节(初学者适用)
对于初学者需要注意的一些细节,比如 namespace 失效的问题,Access数据库中DateTime类型的问题等。原创 2010-09-18 23:38:00 · 1461 阅读 · 2 评论 -
WCF 学习总结6 -- WCF参数与返回值
Message是WCF信道层提供的一个类,在Message类里,数据被标识成一个XML Information Set, 简称为InfoSet。当数据从客户端传输给服务端时,binding里指定的消息编码协议将决定包含客户端所提供数据的Message对象将以何种形式提供给服务(服务端到客户端也一样)。然而,所有标准的binding都会使用将Message对象表示成XML InfoSet的编码协议。根据预定义binding的编码协议,XML InfoSet可能会使用各种标准的XML文本编码、MTOM或者二进制原创 2011-01-19 01:33:00 · 24288 阅读 · 12 评论 -
WCF 学习总结5 -- 消息拦截实现用户名验证
WCF建立在基于消息的通信这一概念基础上。通过方法调用(Method Call)形式体现的服务访问需要转化成具体的消息,并通过相应的编码(Encoding)才能通过传输通道发送到服务端;服务操作执行的结果也只能以消息的形式才能被正常地返回到客户端。所以,消息在整个WCF体系结构中处于一个核心的地位,WCF可以看成是一个消息处理的管道,如下图所示: WCF的一个操作(以及操作的参数)被序列化为Soap协议所支持的消息(XML结构),经过服务运行层,交给Binding中所定义的消息传递层,消息传递层由通原创 2011-01-16 17:46:00 · 23338 阅读 · 21 评论 -
WCF 学习总结4 -- 用Duplex实现消息广播
WCF中定义3种消息交换模式: 1. Request/Reply; 2. One-Way; 3. Duplex。 Request/Reply 是缺省模式,即同步调用。在调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型。 One-Way 这种方式在调用方法后会立即返回。需要注意的是 One-Way 不能用在非void,或者包含 out/ref 参数的方法上,会导致抛出 InvalidOperationException 异常。 Duplex 又称为双工通信,实现起来比前两原创 2011-01-15 20:54:00 · 21763 阅读 · 15 评论