随笔分类 - 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)标准。它不需要在可序列化类上有任何声明性的属性。
阅读全文
摘要:学习与强化在双工模式下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
阅读全文
摘要:不说废话,直接上代码。以下服务创建是在独立的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,
阅读全文
摘要:不说废话,直接上代码。以下服务创建是在独立的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,
阅读全文
摘要:通过LINQ表达式树动态构建查询条件
第一种方法:PredicateExtensions
第二种方法:PredicateBuilder
注意,经我实际应用,发现第一种方法PredicateExtensions类有个缺陷,就是仅适合在DbDataContext中使用,若用在EntityContext中,则会报错:LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”。而使用第二种方法则不会有这个问题,至于问题的根源我还没有找到原因,还望高手指教,谢谢!
阅读全文
摘要:EF封装类 增加版,增加从缓存中查找数据方法,供参考!
这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都改成静态方法就可以直接调用了,可能有不足之处,欢迎大家在本文下面评论留言,共同完善,谢谢!
阅读全文
摘要:如果服务地址不确定或后期有可能会变动,则采用通过Get、Post、Soap动态调用WebService的方法会比较好,当然如果服务地址不会出现变更的情况下,可以在VS中直接引用WEB服务,然后就可调用自动生成的SOAPClient类来调用相应的WEB服务方法,这样就简单很多
阅读全文
摘要:我对EF DB FIRST 生成的ObjectContext类进行封装,实现统一的CRUD,以及分页查询、判断是否存在、计数等常用方法,仅供参考!
阅读全文
摘要:在开发Windows服务程序时,我们一般需要添加安装程序,即:serviceInstaller,里面有几个关于名称属性,你都搞明白了吗?
1.Description:表示服务说明(描述服务是干什么的);
2.DisplayName:表示友好名称,可以理解为服务名的别名;
3.ServiceName:表示服务名,此为真正的服务名,与DisplayName是有区别的哦,是系统识别的依据;
这三个属性在WIN7及更高版本操作系统中,同属性但表示却不同:
本地服务列表中:(即:services.msc)
名称列显示的是DisplayName,
描述列显示的是Description。
在WINDOWS任务管理器中的服务选项卡列表中:
名称列显示的是ServiceName,
描述列显示的是DisplayName。
阅读全文
摘要:为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式
dataTable.AsEnumerable().Distinct(new DataComparer((x, y) = return (x[1] == y[1] && x[2] ==y[2]))).CopyToDataTable();
阅读全文
摘要:方法一:利用System.IO.DriveInfo.GetDrives方法来获取
方法二:利用ManagementClass("Win32_LogicalDisk")来获取
阅读全文
摘要:最近一直用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
阅读全文
摘要:最近在编写C/S结构应用程序时,感觉窗体的标题栏样式太死板了,标题文字不能更改大小、颜色、字体等,按钮不能隐藏等问题,在网上也查找了许多相关的资料,没有找到合适的解决方案,发现许多人也在寻求这个问题,最后我决定自己研究动手画一个标题栏出来,经过今天一天的研究与编写,终于完成全部功能,现公布一下我的设计思路。
一、去掉Form类自带的标题栏
要去掉自还的标题栏有两种方法,第一方法是直接将FormBorderStyle设为 System.Windows.Forms.FormBorderStyle.None,但设置过后,窗体改变大小,考虑到后期这些功能还是需要的,所以我采用了第二种方法,第二种方法是可以忽略FormBorderStyle,只需要将ControlBox设为 false,并将Text设为空即可,这种方法隐藏标题栏,若FormBorderStyle不是固定模式,则可以通过拉伸窗体边框改变大小的。
阅读全文
摘要:一、 "开放-封闭"原则(OCP):即一个软件实体应当对扩展开放,对修改关闭。
二、 里氏代换原则(LSP):即子类型(subtype)必须能够替换它们的基类型。
三、 依赖倒置原则(DIP):即要依赖于抽象,不要依赖于具体。
四、 接口隔离原则(ISP):即要求一个类对另外一个类的依赖性应当是建立在最小接口上的。
五、 合成/聚合复用原则(CARP):即在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。
六、 迪米特法则(LoD)[最少知识原则]:即一个对象应当对其它对象有尽可能少的了解。
阅读全文
摘要:在C#多线程编程中,这两个类几乎是不可或缺的,他们的用法/声明都很类似,那么区别在哪里了?
Set方法将信号置为发送状态 Reset方法将信号置为不发送状态 WaitOne等待信号的发送
其实,从名字就可以看出一点端倪 ,一个手动,一个自动,这个手动和自动实际指的是在Reset方法的处理上,如下面例子
public AutoResetEvent autoevent=new AutoResetEvent(true);
public ManualResetEvent manualevent=new ManualResetEvent(true);
阅读全文
摘要:观察模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新;
阅读全文
摘要:迭代器模式(Iterator Pattern),提供一种方法顺序访问一个聚合对象中元素,而不暴露该集合对象的内部表示。
阅读全文
摘要:在一些情况下,对一个消息(含事件)的响应和处理需要很多对象来参与,这些对象对消息的处理有前后顺序,形成一个处理链条,但对象是否真正处理消息有赖于在它之前的对象的处理策略,前一个对象处理后,后一个对象则不需参与处理,这就是责任链模式。现实中有很多类似的场景,比如上访,上访一般是从最基层的信访部门接受信访开始进行处理,如果下一级信访部门无法处理,则交给上一级部门进行处理,这样一级一级的处理,知道最高信访部门。这样所有层级的信访部门就构成了一个责任链。
阅读全文
摘要:C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
阅读全文