随笔分类 -  C#

C#语言开发技术
摘要:在WCF中,提供了专门用来序列化和反序列操作的类,该类就是DataContractSerializer类。一般而言,WCF会自动选择使用DataContractSerializer来对可序列话数据契约进行序列化,不需要开发者直接调用。WCF除了支持DataContractSerializer类来进行序列化外,还支持另外两种序列化器,这两种序列化器分别为:XMLSerializer(定义在System.XML.Serialization namespace)和NetDataContractSerializer (定义在System.XML.Serialization namespace)。XmlSerializer类不是WCF专用的类,Asp.net Web服务统一使用该类作为序列化器,但XmlSerializer类支持的类少于DataContractSerializer列支持的类型,但它允许对生成的XML进行更多的控制,并且支持更多的XML架构定义语言(XSD)标准。它不需要在可序列化类上有任何声明性的属性。 阅读全文
posted @ 2015-03-25 21:15 梦在旅途 阅读(967) 评论(0) 推荐(0) 编辑
摘要:学习与强化在双工模式下WCF服务创建与使用,步骤与代码如下。 第一步,定义服务契约(Service Contract),注意ServiceContract特性上需指定回调契约 //服务契约 using System.ServiceModel; namespace WcfServiceLibrary1 { [ServiceContract(Namespace = "http://wwww.zuowenjun.cn", CallbackContract = typeof(ICallback))] public interface IHello { [OperationContract(IsOneWay = true)] void SetName(string name); } } //回调契约(由于回调契约本质也是一个服务契约,所以定义方式和一般意义上的服务契约基本一样。 有一点不同的是,由于定义服务契约时候已经通过[Ser 阅读全文
posted @ 2015-03-25 21:12 梦在旅途 阅读(3174) 评论(0) 推荐(0) 编辑
摘要:不说废话,直接上代码。以下服务创建是在独立的WCF类库中,若采用WCF应程程序,定义及创建服务代码均相同,但文件名不同,是CalculatorService.svc 第一步,定义服务契约(Service Contract),即:定义一个服务接口 using System.ServiceModel; namespace WcfServiceLibrary1 { [ServiceContract(Namespace="http://www.zuowenjun.cn")] public interface ICalculator { [OperationContract] double Add(double x, double y); [OperationContract] double Subtract(double x, double y); [OperationContract] double Multiply(double x, 阅读全文
posted @ 2015-03-25 21:04 梦在旅途 阅读(461) 评论(0) 推荐(0) 编辑
摘要:不说废话,直接上代码。以下服务创建是在独立的WCF类库中,若采用WCF应程程序,定义及创建服务代码均相同,但文件名不同,是CalculatorService.svc 第一步,定义服务契约(Service Contract),即:定义一个服务接口 using System.ServiceModel; namespace WcfServiceLibrary1 { [ServiceContract(Namespace="http://www.zuowenjun.cn")] public interface ICalculator { [OperationContract] double Add(double x, double y); [OperationContract] double Subtract(double x, double y); [OperationContract] double Multiply(double x, 阅读全文
posted @ 2015-03-25 20:54 梦在旅途 阅读(395) 评论(0) 推荐(0) 编辑
摘要:通过LINQ表达式树动态构建查询条件 第一种方法:PredicateExtensions 第二种方法:PredicateBuilder 注意,经我实际应用,发现第一种方法PredicateExtensions类有个缺陷,就是仅适合在DbDataContext中使用,若用在EntityContext中,则会报错:LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”。而使用第二种方法则不会有这个问题,至于问题的根源我还没有找到原因,还望高手指教,谢谢! 阅读全文
posted @ 2015-03-20 22:20 梦在旅途 阅读(1862) 评论(0) 推荐(1) 编辑
摘要:EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都改成静态方法就可以直接调用了,可能有不足之处,欢迎大家在本文下面评论留言,共同完善,谢谢! 阅读全文
posted @ 2015-02-07 11:15 梦在旅途 阅读(1576) 评论(2) 推荐(0) 编辑
摘要:如果服务地址不确定或后期有可能会变动,则采用通过Get、Post、Soap动态调用WebService的方法会比较好,当然如果服务地址不会出现变更的情况下,可以在VS中直接引用WEB服务,然后就可调用自动生成的SOAPClient类来调用相应的WEB服务方法,这样就简单很多 阅读全文
posted @ 2015-02-02 13:42 梦在旅途 阅读(7872) 评论(2) 推荐(1) 编辑
摘要:我对EF DB FIRST 生成的ObjectContext类进行封装,实现统一的CRUD,以及分页查询、判断是否存在、计数等常用方法,仅供参考! 阅读全文
posted @ 2015-01-29 13:02 梦在旅途 阅读(3580) 评论(0) 推荐(2) 编辑
摘要:在开发Windows服务程序时,我们一般需要添加安装程序,即:serviceInstaller,里面有几个关于名称属性,你都搞明白了吗? 1.Description:表示服务说明(描述服务是干什么的); 2.DisplayName:表示友好名称,可以理解为服务名的别名; 3.ServiceName:表示服务名,此为真正的服务名,与DisplayName是有区别的哦,是系统识别的依据; 这三个属性在WIN7及更高版本操作系统中,同属性但表示却不同: 本地服务列表中:(即:services.msc) 名称列显示的是DisplayName, 描述列显示的是Description。 在WINDOWS任务管理器中的服务选项卡列表中: 名称列显示的是ServiceName, 描述列显示的是DisplayName。 阅读全文
posted @ 2015-01-03 11:44 梦在旅途 阅读(994) 评论(2) 推荐(2) 编辑
摘要:为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式 dataTable.AsEnumerable().Distinct(new DataComparer((x, y) = return (x[1] == y[1] && x[2] ==y[2]))).CopyToDataTable(); 阅读全文
posted @ 2014-12-22 15:41 梦在旅途 阅读(832) 评论(0) 推荐(0) 编辑
摘要:方法一:利用System.IO.DriveInfo.GetDrives方法来获取 方法二:利用ManagementClass("Win32_LogicalDisk")来获取 阅读全文
posted @ 2014-12-19 11:08 梦在旅途 阅读(6718) 评论(0) 推荐(0) 编辑
摘要:最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题及对应的解决方案都整理汇总出来,供大家参供,有不对之处或有更好的解决办法,欢迎在本文评论,谢谢! 问题一:执行类似语句:dbDataContext.TableName.Join(modelList as List,t1=t1.id,t2=t2.id,(t1,t2)=new{属性赋值}),报错:不能在查询运算符(Contains 运算符除外)的 LINQ to SQL 实现中使用本地序列。 原因分析:数据表映射实体对象无法与C#自有集合对象关联查询,必需确保LINQ 语句进行查询与运算均为数据表映射实体对象或C#自有集合对象 解决方案:dbDataContext.TableName.Join(dbDataContext.TableName2,t1=t1.id,t2=t2.id,(t1,t2)=new{属性赋值}),或dbDataContext.T 阅读全文
posted @ 2014-12-02 13:45 梦在旅途 阅读(2596) 评论(2) 推荐(2) 编辑
摘要:最近在编写C/S结构应用程序时,感觉窗体的标题栏样式太死板了,标题文字不能更改大小、颜色、字体等,按钮不能隐藏等问题,在网上也查找了许多相关的资料,没有找到合适的解决方案,发现许多人也在寻求这个问题,最后我决定自己研究动手画一个标题栏出来,经过今天一天的研究与编写,终于完成全部功能,现公布一下我的设计思路。 一、去掉Form类自带的标题栏 要去掉自还的标题栏有两种方法,第一方法是直接将FormBorderStyle设为 System.Windows.Forms.FormBorderStyle.None,但设置过后,窗体改变大小,考虑到后期这些功能还是需要的,所以我采用了第二种方法,第二种方法是可以忽略FormBorderStyle,只需要将ControlBox设为 false,并将Text设为空即可,这种方法隐藏标题栏,若FormBorderStyle不是固定模式,则可以通过拉伸窗体边框改变大小的。 阅读全文
posted @ 2014-11-30 19:58 梦在旅途 阅读(41046) 评论(13) 推荐(5) 编辑
摘要:一、 "开放-封闭"原则(OCP):即一个软件实体应当对扩展开放,对修改关闭。 二、 里氏代换原则(LSP):即子类型(subtype)必须能够替换它们的基类型。 三、 依赖倒置原则(DIP):即要依赖于抽象,不要依赖于具体。 四、 接口隔离原则(ISP):即要求一个类对另外一个类的依赖性应当是建立在最小接口上的。 五、 合成/聚合复用原则(CARP):即在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。 六、 迪米特法则(LoD)[最少知识原则]:即一个对象应当对其它对象有尽可能少的了解。 阅读全文
posted @ 2014-03-02 22:00 梦在旅途 阅读(479) 评论(0) 推荐(0) 编辑
摘要:在C#多线程编程中,这两个类几乎是不可或缺的,他们的用法/声明都很类似,那么区别在哪里了? Set方法将信号置为发送状态 Reset方法将信号置为不发送状态 WaitOne等待信号的发送 其实,从名字就可以看出一点端倪 ,一个手动,一个自动,这个手动和自动实际指的是在Reset方法的处理上,如下面例子 public AutoResetEvent autoevent=new AutoResetEvent(true); public ManualResetEvent manualevent=new ManualResetEvent(true); 阅读全文
posted @ 2014-03-01 19:05 梦在旅途 阅读(455) 评论(0) 推荐(0) 编辑
摘要:.NET 笔试题,自己已做答,仅供参考! 阅读全文
posted @ 2014-01-04 16:59 梦在旅途 阅读(365) 评论(0) 推荐(0) 编辑
摘要:观察模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新; 阅读全文
posted @ 2014-01-04 14:41 梦在旅途 阅读(313) 评论(0) 推荐(0) 编辑
摘要:迭代器模式(Iterator Pattern),提供一种方法顺序访问一个聚合对象中元素,而不暴露该集合对象的内部表示。 阅读全文
posted @ 2014-01-04 10:49 梦在旅途 阅读(300) 评论(0) 推荐(0) 编辑
摘要:在一些情况下,对一个消息(含事件)的响应和处理需要很多对象来参与,这些对象对消息的处理有前后顺序,形成一个处理链条,但对象是否真正处理消息有赖于在它之前的对象的处理策略,前一个对象处理后,后一个对象则不需参与处理,这就是责任链模式。现实中有很多类似的场景,比如上访,上访一般是从最基层的信访部门接受信访开始进行处理,如果下一级信访部门无法处理,则交给上一级部门进行处理,这样一级一级的处理,知道最高信访部门。这样所有层级的信访部门就构成了一个责任链。 阅读全文
posted @ 2014-01-04 09:17 梦在旅途 阅读(341) 评论(0) 推荐(0) 编辑
摘要:C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。 C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。 阅读全文
posted @ 2013-12-27 22:07 梦在旅途 阅读(430) 评论(0) 推荐(0) 编辑