随笔分类 - C#
C#
    
摘要:客户端调用wcf ,有时需要动态的调用服务端的WCF中的方法,本方法,反射wcf 的接口,动态调用接口中的方法。主要为,动态绑定,反射动态调用。publicstaticobjectExecuteMethod<T>(stringpUrl,stringpMethodName,paramsobject[]pParams){EndpointAddressaddress=newEndpointAddress(pUrl);Bindingbindinginstance=null;NetTcpBindingws=newNetTcpBinding();ws.MaxReceivedMessageSiz
        阅读全文
            
摘要:无论什么平台,编写支持高并发性的网络服务器,瓶颈往往出在I/O上,目前最高效的是采用Asynchronous I/O模型,Linux平台提供了epoll,Windows平台提供了I/O Completion Port(IO完成端口,即IOCP)。Windows自winsock2开始就提供了IOCP支持,可以通过C++直接调用API,但对于基于.Net的C#开发,是在.Net Framework2.0开始才引入的,在2.0版本下,最高效的网络服务器是通过异步Socket的一些列Beginxxx,Endxxx方法实现的,底层就是基于IOCP的。当.Net Framework升级到2.0 sp1之后
        阅读全文
            
摘要:使用反射动态调用类成员,需要Type类的一个方法:InvokeMember。对该方法的声明如下(摘抄于MSDN):public object InvokeMember( string name,BindingFlags invokeAttr, Binder binder, object target, object[] args);参数name String,它包含要调用的构造函数、方法、属性或字段成员的名称。 - 或 - 空字符串 (""),表示调用默认成员。 invokeAttr 一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 B
        阅读全文
            
摘要:上篇文章 http://www.cnblogs.com/jianyi0115/archive/2007/03/16/677712.html讲述了如何通过iis的webdav支持实现客户端的office直接编辑服务器上的文件,本篇将讲解如何实现客户端的office直接编辑数据库中的二进制形式保存的office文件。实现的关键:模拟IIS,自己实现一个webdav的服务器端。首先,我们简单了解一下webdav:webdav,中文可以翻译为网络分布式协作协议,它解决了http协议中一个问题:http无法实现版本和单访问控制。什么是单访问控制呢?假设我们有一个页面编辑某条数据,这个页面可以同时被多个用
        阅读全文
            
摘要:Func,Action 的介绍及其用法Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能。Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型,Func<T,T,Result>:有参数,有返回类型Action,则既没有返回也没有参数,Func<T,TResult> 的表现形式分为以下几种:1。Func<T,TResult>2。Fun
        阅读全文
            
摘要:在一些需要定时执行的任务时,比如:定时备份数据库,定时的获取网络数据等都需要计划任务。Window也有计划任务但是有很多的缺点,必须手动配置,而且部署起来也很麻烦,时间的精度为一分钟,只能对应用程序配置任务。这里实现的任务计划是可以自己编程,可以很灵活,时间的精度为一秒,而且不是通过轮询时间实现的,效率比较高,。你可以在Windows 服务中写一个服务,用它来管理所有的计划任务逻辑。类库源代码如下:/********************************************************************************************* (C)2
        阅读全文
            
摘要:一.TcpSvr的使用方法A.测试程序:using System;using Ibms.Net.TcpCSFramework;using System.Collections;using System.Net.Sockets;namespace Ibms.Test{/// <summary>/// 测试TcpSvr的类/// </summary>public class TestTcpSvr{public TestTcpSvr(){}public static void Main(){try{Console.WriteLine("Begin to Test T
        阅读全文
            
摘要:一、Emit概述 Emit,可以称为发出或者产生。在Framework中,与Emit相关的类基本都存在于System.Reflection.Emit命名空间下。可见Emit是作为反射的一个元素存在的。说道反射,大家应该都不陌生,它允许我们查看程序集的元素据,从而取得形如程序集包含哪些类型,类型包含哪些方法等等大量的信息。但是反射也仅能够‘看’,而Emit则可以在运行时动态生成代码。接下来就来看看如何用Emit生成代码。二、动态生成代码 首先需要明确的是这里的代码并不是我们时常提到的C#,VB等源代码,而是IL代码。既然是IL代码,那学习Emit是不是要先对IL很熟悉呢?诚然,熟悉IL代码对..
        阅读全文
            
摘要:关于C#中动态加载AppDomain的问题 在操作系统中,利用进程可以对正在运行的应用程序进行隔离,每个应用程序被加载到单独的进程中,并为其分配虚拟内存,进程无法直接访问物理内存,只能通过操作系统将虚拟内存映射到物理内存中,并保证进程之间的物理内存不会重叠,但是进程最大的缺点就是效率问题,尤其是进程的切换开销很大,而进程间不能共享内存,所以不可能从一个进程通过传递指针给另一个进程。 在.NET中出现了一个新的概念:AppDomain——应用程序域,所有.NET应用程序都需要运行在托管环境中,操作系统能提供的只有进程,因此.NET程序需要通过AppDomain这个媒介来运行在进程中,同时使...
        阅读全文
            
摘要:public class Loader : MarshalByRefObject{ // Methods public object LoadObject(string dllName, string typeName) { return Assembly.LoadFrom(dllName).CreateInstance(typeName); } public T GetInstance<T>(string typeName) where T : class { if (remoteLoader == null) return null; return remoteLoader.G
        阅读全文
            
摘要:话说nginx是一个非常NB的高性能Web和反向代理服务器,传说新浪、迅雷等大网站都在用。以前也就听大牛们讲讲,没什么太深刻的概念,今天终于自己亲手操刀实践了一把,顺便把过程记录了下来分享给大家,这个很基础,就用轮询的方式来做一个负载均衡,最简单的配置了,今后再去深入了解它。对了,不知道nginx是什么的同学就先自己去捣鼓一下,回头如果有兴趣可以再来看下去,给几个链接:http://zh.wikipedia.org/zh/Nginxhttp://baike.baidu.com/view/926025.htm由于我linux实在是用不溜,所以就在windows搞搞了。一、在windows上安装n
        阅读全文
            
摘要:在看反射之前我们来看一下.Net源代码是怎么执行的: 我们看到.Net源代码是两次编译,一次执行的。在Visual Studio经过第一次编译生成程序集(.exe,.dll),就是IL(中间语言)和元数据,然后在经过CLR(公共语言运行库),将程序集编译成机器代码,机器代码在交给cpu去执行。我们来看.Net源代码在第一次编译之后: 现在来看一下什么是反射,反射是编程的读取与类型相关联的元数据的行为。通读取元数据,可以了解它是什么类型以及类型的成员。比如类中的属性,方法,事件等。所属命名空间System.Reflection。 反射具体是怎么实现的,下面通过一个例子来具体说明。 首先在解决方案
        阅读全文
            
摘要:我在前文当泛型的参数类型是动态的... 中以一个简单的例子引出了动态代理,我们使用动态代理,主要是因为动态代理拥有这样的能力--使得某个类型A在运行的时候能转化为一个指定的接口I,即使这个类型A在定义的时候并没有从这个指定的接口I继承。 这句话是什么意思了?还是回到当泛型的参数类型是动态的... 一文中的那个例子,在例子中,List<>并没有从ISimpleList继承,但是从表面看来,在运行的时候,我们通过动态代理可以以ISimpleList接口来“引用”List<>类型的对象。动态代理是在运行时在内存中构建的一种类型,该类型实现了接口I,但是它将所有的方法调用都转发
        阅读全文
            
摘要:ESFramework介绍之(35)―― IMessageTransceiver (本文适用于ESFramework V0.3+) 在ESFramework介绍之(7)-- 服务器代理IServerAgent 一文中,我们详细的介绍了IServerAgent,我们已经知道,客户端与服务器之间的所有通信都可经过IServerAgent,包括要转发的P2P消息。IServerAgent的主要目的是:(1)屏蔽客户端与服务端之间的通信协议(Tcp/Udp),ITcpServerAgent、IUdpServerAgent(2)可将异步的消息请求/回复转化为同步的方法调用。 客户端与服务端的所有交互都可
        阅读全文
            
摘要:这是一篇迟到了很久的文章,要不是今天看到Mediar朋友写的“基于ESFramewok的 客户端和客户端通迅”的文章,我也许还不会想起写这篇应该很早就发表的Blog,它可以帮助ESFramework的研究者/使用者们更好的使用ESFramework。Mediar朋友的那篇文章中介绍了通过服务器转发P2PMessage,Mediar手动实现了一个自己的处理器,实际上ESFramework已经内置了P2PMessage的处理器,那就是P2PMessageDealer,P2PMessageDealer不仅可以把消息转发给连接到同一个AS上的好友,而且可以转发给连接到异地AS上的好友。不管怎样,还是.
        阅读全文
            
摘要:对大多数大型系统而言,数据库往往是最容易出现瓶颈的地方,而通过使用恰当的缓存技术可以非常有效地减轻数据库的负载。将系统中用到的所有数据进行分类,分别对待不同种类的数据而不是一视同仁,有利于正确地做出缓存哪些数据、以及如何缓存的决策。我通常将系统中用到的数据分为四类:恒定不变的数据,只发生增量的数据,偶尔改变的数据,经常改变的数据。(1)对于恒定不变的数据,采用普通的恒定缓存,即这种缓存在系统启动后初始化一次就不再改变了。(2)对于只发生增量的数据,采用智能式的增量缓存,如果所要的数据在这种缓存中不存在,则该缓存会从其它地方(如数据库)自动加载目标对象并缓存起来。(3)对于偶尔改变的(但不是十分
        阅读全文
            
摘要:ESFramework介绍之(23)―― AgileTcp 前面已经介绍了ITcp接口,而AgileTcp就是ESFramework给出的ITcp的参考实现。在之前,我曾经讲解过模拟完成端口的Tcp组件实现和异步Tcp组件实现,在它们的基础之上,我更改了处理策略,而形成了AgileTcp,目的是更清晰的结构、更高的效率。这个策略会在后面讲到。 Tcp组件主要控制着系统与终端用户的所有消息的进出,ITcp接口描述了这个组件的外貌,告诉外部如何使用Tcp组件、如何与Tcp组件交互。而从实现的角度来看,我们必须理清Tcp组件的职责:(1)管理所有已经建立的Tcp连接(2)管理与每个连接相对应接收缓.
        阅读全文
            
摘要:.NET平台下可复用的Tcp通信层实现(续) 上一篇主要讲到了Tcp通信层中的核心组件――Tcp组件的实现,Tcp组件是整个通信层的消息驱动源,甚至,可以将Tcp组件看作是我们整个服务器系统的消息驱动源,消息处理过程从这里引发。类似的消息驱动源还有发布的WebService接口、Remoting接口等。今天我们需要关注的是Tcp通信层中的“中央”组件――消息分派器组件ITcpReqStreamDispatcher,大家已经从前文的组件关系图中看到了消息分派器的大致位置和作用了,它是Tcp通信组件和消息处理器之间的“桥梁”。我们再对前文描述的通信层组件之间关系的一段话回顾一下: “当网络(Tc.
        阅读全文
            
摘要:.NET平台下可复用的Tcp通信层实现 2006年已经来临,回首刚走过的2005,心中感慨万千。在人生和生活的目标上,有了清晰明确的定位,终于知道了自己喜欢什么样的生活,喜欢什么样的生活方式;在技术上,成熟了不少,眼界也开阔的不少,从面向对象到组件、从.Net到J2EE、从微软到开源,颇有收获。特别值得一提的是,认识了Rod Johnson这个大牛人,也终于在自己的项目中正式使用Spring.net框架来开发了,这确实是一个优秀的框架。而在已经到来的2006年,我有一个主要目标就是B/S应用开发,来填补自己在企业级开发上的另一半空白。 以前就很想将自己在Tcp通信层的开发心得、经验共享出来..
        阅读全文
            
摘要:有很多朋友要求给出一个应用ESFramework的Demo,在前面介绍ESFramework支持的4层架构中(回顾),有AS、FS、IRAS,其中FS的功能需求最简单,所以本文就给出一个FS实现示例。 FS主要用于管理功能插件,并且将所有的功能性请求都转发给对应的功能插件处理,不需要关心用户(由AS管理)、不用关心具体的业务需求(由对应的功能插件处理),所以FS非常的单纯,基本上是与应用无关的,可以在任何应用中复用同一个FS。(但是AS和IRAS就很难复用了,因为不同的应用对AS、IRAS的需求的差别可能非常大)。实际上,FS的实现自己只包含4个cs文件,绝大多数组件都由ESFramework
        阅读全文
            
 
                    
                     
                    
                 
                    
                 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号