最新版本号[免费下载]
  • ASP.NET Session的七点认识
    ASP.NET Session的七点认识

    ASP.NET Session的使用当中我们会遇到很多的问题,那么这里我们来谈下经常出现的一些常用ASP.NET Session的理解:ASP.NET Session的七点认识之一  对于值类型的变量,Session中保存的是值类型的拷贝Session[ 2018-09-30

    139

  • WCF客户端运行时架构体系详解[上篇]
    WCF客户端运行时架构体系详解[上篇]

    客户端调用WCF服务的方式不外乎有两种:其一、通过代码生成工具(比如SvcUtil.exe)导入服务的元数据生成服务代理相关的类型;其二、通过ChannelFactory<TChannel>创建服务代理对象。对于前者,生成的服务代理是一个继承自ClientBase<TChannel>的类型。对于这样一个服务代理对象,其内部本质上还是借助于ChannelFactory<TChannel>创建真正用于进行服务调用的代理对象。对于WCF客户端应用编程接口来说,ChannelFactory<TChannel>是一个核心类型。目录 一、创建ChannelFactory<TChannel> 二、客户端架构体系       信道初始化       消息检验       操作和操作选择 三、 客户端操作(ClientOperation)  一、创建ChannelFactory<TChannel>  服务调用的本质实际上是针对服务的某个终结点的调用,说得具体地应该是:客户端通过相匹配的终结点调用服务的终结点。终结点具有ABC(Address

    客户端,体系,运行,详解,架构
    2018-09-30

    199

  • WCF服务端运行时架构体系详解[中篇]
    WCF服务端运行时架构体系详解[中篇]

    摘要:在这篇文章中,我们对信道分发器本身作一个深入的了解,首先来看看它具有哪些可供扩展的组件,以及我们可以针对信道分发器对WCF实现哪些可能的扩展。目录: ErrorHandler & ServiceThrottle ChannelInitializer IncludeExceptionDetailInFaults ManualAddressing MaxPendingReceives ReceiveSynchronously IsTransactedReceive & MaxTransactedBatchSize TransactionIsolationLevel & TransactionTimeout  信道分发器对应的类型为ChannelDispatcher,下面的代码片断给出了ChannelDispatcher部分属性成员的定义。而这些属性代表了包含在信道分发器中那些可供扩展的组件。信道分发器是基于信道监听器创建的,后者用于请求消息的监听和消息接收信道栈的创建。信道监听器对应于只读属性Listener。 2018-09-30

    166

  • WCF服务端运行时架构体系详解[下篇]
    WCF服务端运行时架构体系详解[下篇]

    作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象。站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象。如果站在WCF服务端运行时框架来说,终结点实际上指代的是终结点分发器(EndpointDispatcher)。而ServiceEndpoint与EndpointDispatcher是一一匹配的,并且前者是创建后者的基础。而终结点分发器具有自己的运行,即分发运行时(DispatchRuntime)。目录 一、终结点分发器(EndpointDispatcher) 二、分发运行时(DispatchRuntime)       可扩展组件                         认证与授权             服务实例上下文             会话关闭通知             同步上下文             消息检验             操作与操作选择    可扩展属性            授权            审核            事务与会话            未处理操作            SOAP ValidateMustUnderstand处理            并发控制  一、终结点分发器(EndpointDispatcher)  除了之前介绍的三个辅助信道分发器向匹配的终结点分发器实施消息路由的三个属性(AddressFilter、ContractFilter和FilterPriority)之外,你还可以通过属性ContractName和ContractNamespace得到服务契约的名称和命名空间,以通过EndpointAddress属性得到相应的终结点地址。将消息路由到该终结点分发器的信道分发器可以通过属性ChannelDispatcher获得。但是对于终结点分发器来说,其重要的还是通过属性DispatchRuntime表示的分发运行时。 2018-09-30

    97

  • WCF服务端运行时架构体系详解[续篇]
    WCF服务端运行时架构体系详解[续篇]

    终结点分发器在自己的运行时中对请求消息的处理最终肯定体现在相应操作的执行。如果从服务描述的角度来看,操作是一个OperationDescription对象。而服务端分发运行时中的操作则代表的是一个DispatchOperation对象。作为服务描述的一部分,服务所有终结点的所有操作描述(OperationDescription)在ServiceHost创建过程中被创建。而当ServiceHost被正常开始时,这些操作描述最终转换成分发操作(DispatchOperation)。而DispatchRuntime的Operations属性代表了对应终结点的所有分发操作。目录: 一、序列化与反序列 二、调用上下文初始化 三、参数的检验 四、服务实例的释放 五、事务 六、操作的执行 七、参数和返回值的释放 八、身份模拟 总结  接下来,我们同样从可扩展的角度来分析DispatchOperation,下面的代码片断列出了所有可供扩展的属性。 2018-09-30

    109

  • 什么是闭包,我的理解
    什么是闭包,我的理解

    首先,我觉得,一个概念,如果不理解也不影响使用的话,那么,就没必要去理解它、去学习它。闭包就是这样一个概念,你不理解它也能很好的用它。俺这两年写as3程序,是天天在和它打交道,甚至有过一个function套一个,一个方法中套了20多个function的极端例子,但从未深究过它是怎么实现的,它就像水和空气一样,我们不需要知道水是H2O,空气是氧气氮气二氧化碳等的混合物,也活的好好的。  其次,我觉得,网上对闭包概念的解释都太狭隘了,看得人蛋疼,就像回到了i++

    理解,
    2018-09-30

    128

  • Dino Esposito: 一个领域模型的设计
    Dino Esposito: 一个领域模型的设计

    英文原文:Design of a Domain Model  最新发布的 Entity Framework 4.1 和新的 Code First 开发模式打破了服务器程序开发的基本规则:如果数据库没有准备就绪,不要轻举妄动(Don’t take a single step)。Code First 允许开发人员重点关注业务领域并根据“类”(class)来为该领域建模。在某种程度上, Code First 模式鼓励在 .NET 环境中应用“领域驱动设计 (DDD) ”原则。业务领域由相互关联的实体构成,这些实体通过属性对外公开自己的数据,通过方法和事件对外公开自己的行为。更重要的是,每个实体都可能处于某一状态,并且与一组动态的验证规则相绑定。  为实际应用场景编写对象模型会面临一些在演示程序和教程中没有涉及的问题。在本文中,我将挑战这些问题,并讨论如何构建 Customer 类,我会就此简要介绍一些设计模式和设计实践,例如Party模式、聚合根(aggregate roots)、工厂(factories)以及代码协定(Code Contracts)和企业库验证应用程序块 (VAB) 等技术。  有一个开源项目可以作为参考,这里讨论的代码就是其中的一小部分。 它就是由 Andrea Saltarello 创建的 Northwind Starter Kit 项目 (nsk.codeplex.com) ,该项目旨在介绍构建多层解决方案的有效实践。  对象模型(Object Model) vs. 领域模型(Domain Model)  争论是使用对象模型还是领域模型似乎没有意义,在大多数情况下,这只是一个术语表述问题(terminology)。 但准确地使用术语是确保团队所有成员在使用特定术语时始终遵循同一概念的重要因素。  对于软件行业的几乎每个人而言,对象模型是一个具有共性的并且可能相关的对象的集合。领域模型有何不同? 域模型归根结底仍然是一个对象模型,因此,交替使用这两个术语可能不会产生严重的错误。但在专门强调使用“领域模型”一词时,它可能会使大家对所构建的对象的形态(shape)产生某些期望。  领域模型的这种用法与 Martin Fowler 给出的以下定义相关:由行为和数据组合而成的领域的对象模型。相应地,这些行为用于表达业务规则和特定的业务逻辑(请参阅 P of EAA page 116)。An object model of the domain that incorporates both behavior and data. In turn

    设计,模型,一个,领域,
    2018-09-30

    118

  • 一张破图胜过长篇大论(译文:关于Windows 8的新编程体系)
    一张破图胜过长篇大论(译文:关于Windows 8的新编程体系)

    译者:linger(sysu大三 )  注:本文是DOUG SEVEN写的关于Windows 8新的编程体系的一篇文章《A bad picture is worth a thousand long discussions》的译文。  在Build会议中,我跟顾客,还有其他的参与者,Microsoft的mvp,Microsoft的地方主管,Microsoft的工程团队成员谈了很多。其中谈的最多的是,Windows 8的平台和工具的技术盒子图。如下所示:  现在我告诉你,我曾画过很多这种软件架构图,当然并不是很容易画出来的。这种图从技术的角度来说永不可能是精确的。显然没有一种简单的方式对这种复杂的系统来画一张技术上精确无误的框架图。结果是,你的框架图是会漏掉很多盒子的(漏掉很多在整个体系中实际存在的技术)。不幸的是,那正是这里所发生的事(Windows 8的技术盒子漏掉了一些实际存在的技术)。  谈话中其中之一的话题是围绕着技术盒子中绿色部分(即是Metro风格的应用程序)为何没有出现.NET和CLR。是不是在Metro风格的应用程序中,VB,C#在编译和运行过程都不兼容WinRT?这意味着.NET框架的终结么?  还有一些研究过二进制码的质疑是否有两个CLR。Windows 8究竟在搞什么呢?  昨晚我跟.NET CLR的团队的成员们交流过(这里不说出他们的名,不过请相信我,他们肯定明确知道这个体系是如何运行的),下面是一些内部消息。  基本事实:  只有一个CLR。每个应用程序或者应用程序池围绕着一个进程旋转,而CLR就是在该进程内部工作的。这意味着,同时运行的一个Metro风格的应用程序和一个桌面模式的应用程序用的是相同的CLR二进制码,只不过是CLR的两个不同的实例。  .NET4.5在桌面模式的应用程序和Metro风格的应用程序都可以用到。不过有点不同。Metro风格的应用程序使用的是最适合称之为另一个.NET的Profile (比如说桌面模式的应用程序使用的是.NET Client的Profile ,而Metro风格的应用程序使用的是.NET Metro的Profile)。事实上并不是不相同,但在Metro风格的应用程序中.NET的实现像是另一个Profile一样。  不管一个桌面模式的应用程序或者Metro风格的应用程序是不是.NET的app

    胜过,体系,译文,新编,长篇
    2018-09-30

    93

  • IIS是如何处理ASP.NET请求的
    IIS是如何处理ASP.NET请求的

    英文原文:Beginner’s Guide: How IIS Process ASP.NET Request  前言  每次服务器接受到请求,都要先经IIS处理。这不是一篇描述ASP.NE生命周期的文章,仅仅是关于IIS操作的。在我们开始之前,先了解这些会有助于对全文的理解,同时欢迎反馈和建议。  什么是Web Server?  每当我们通过VS运行ASP.NET网站时,VS集成的ASP.NET引擎会响应各种请求,这个引擎的名字叫“WebDev.WebServer.exe”。  当我们配置一个Web程序时,总会涉及到一个词“Web Server”,它的功能便是会响应所有请求。  什么是IIS?  IIS(Internet Information Server)是微软Web Server的一种,用来配置ASP.NET站点。IIS拥有自己的ASP.NET处理引擎来处理请求,因此,当一个请求到达时,IIS接收并处理请求,然后返回内容。  请求处理过程  现在,你应能搞清楚Web Server和IIS的区别。现在我们来看一下核心部分。在继续之前,你需要搞清两个概念:  1、工作进程(Worker Process)  2、应用程序池(Application Pool)  工作进程:在IIS中,工作进程(w3wp.exe)运行着ASP.NET应用程序,管理并响应所有的请求,ASP.NET所有的功能都运行在工作进程下,当请求到来时,工作进程会生成Request和Response相关的信息。简而言之,工作进程就是ASP.NET程序的心脏。  应用程序池:应用程序池是工作进程的容器,通常用来隔开不同配置的工作进程。当一个程序出错或进程资源回收时,其他池中的程序不会受到影响。  注:当一个应用程序池包含多个工作进程时,被叫做“Web Garden”。  如果我们看一下IIS 6.0的结构,就会发现,可以把它分成两部分:  1、内核模块(Kernel Mode)  2、用户模块(User Mode)  内核模式是从IIS 6.0被引入的,它包含了一个叫HTTP.SYS的文件,每当请求进来时,会首先触发该文件的响应。  HTTP.SYS文件负责把请求传入相应的应用程序池中。但HTTP.SYS如何知道应传给哪个应用程序池呢?当然不是随机抽取,每当创建一个应用程序池,该池的ID就会生成并在HTTP.SYS文件中注册,因此该文件才能确定将请求往哪传。  以上便是IIS处理请求的第一步。接着,我们来看一下请求如何从HTTP.SYS传入应用程序池。  在IIS的用户模块中,通过Web Admin Services (WAS)从HTTP.SYS接收请求,并传入相应的应用程序池中。  当应用程序池接收到请求,会接着传给工作进程(w3wp.exe),该进程检查来请求的URL后缀以确定加载哪个ISAPI扩展。ASP.NET加载时会附带自己的ISAPI扩展(aspnet_isapi.dll),以便在IIS中映射。  注意:如果先安装了asp.net,然后再安装IIS,就需要通过aspnet_regiis命令来注册ASP.NET中的ISAPI扩展。  一旦工作进程加载了aspnet_isapi.dll

    如何,请求,处理,
    2018-09-30

    114

  • IIS 内部运行机制
    IIS 内部运行机制

    ASP.NET是一个非常强大的构建Web应用的平台,它提供了极大的灵活性和能力以致于可以用它来构建所有类型的Web应用。  绝大多数的人只熟悉高层的框架如: WebForms 和 WebServices — 这些都在ASP.NET层次结构的最高层。  这篇文章的资料收集整理自各种微软公开的文档,通过比较 IIS5、IIS6、IIS7 这三代 IIS 对请求的处理过程, 让我们熟悉 ASP.NET的底层机制并对请求(request)是怎么

    内部,运行,机制,
    2018-09-30

    122

  • 谈谈.NET中常见的内存泄露问题——GC、委托事件和弱引用
    谈谈.NET中常见的内存泄露问题——GC、委托事件和弱引用

    其实吧,内存泄露一直是个令人头疼的问题,在带有GC的语言中这个情况得到了很大的好转,但是仍然可能会有问题。一、什么是内存泄露(memory leak)?内存泄露不是指内存坏了,也不是指内存没插稳漏出来了,简单来说,内存泄露就是在你期待的时间内你程序所占用的内存没有按照你想象中的那样被释放。因此什么是你期待的时间呢?明白这点很重要。如果一个对象占用内存的时间和包含这个对象的程序一样长,但是你并不期望是这样。那么就可以认为是内存泄露了。用具体例子来说明如下:class Button {  public void OnClick(object sender

    事件,谈谈,内存,引用,泄露
    2018-09-30

    149

  • 项目代码风格要求
    项目代码风格要求

    项目代码风格要求PDF版下载:项目代码风格要求V1.0.pdf代码风格没有正确与否,重要的是整齐划一,这是我拟的一份《项目代码风格要求》,供大家参考。1. C# 代码风格要求1.1注释类型、属性、事件、方法、方法参数,根据需要添加注释。如果类型、属性、事件、方法、方法参数的名称已经是自解释了,则不需要加注释;否则必须添加注释。当添加注释时,添加方式如下图所示:1.2 类型(类、结构、委托、接口)、字段、属性、方法、事件的命名优先考虑英文,如果英文没有合适的单词描述,可以使用拼音

    要求,项目,代码,风格,
    2018-09-30

    111

  • 使用缓存的9大误区(下)
    使用缓存的9大误区(下)

    相关文章:使用缓存的9大误区(上)  本篇文章在上篇的基础上继续讨论了使用缓存的几个误区,包括:缓存大量的数据集合,而读取其中一部分;缓存大量具有图结构的对象导致内存浪费;缓存应用程序的配置信息;使用很多不同的键指向相同的缓存项;没有及时的更新或者删除再缓存中已经过期或者失效的数据。  缓存大量的数据集合,而读取其中一部分  在很多时候,我们往往会缓存一个对象的集合,但是,我们在读取的时候,只是每次读取其中一部分。 我们举个例子来说明这

    使用,误区,
    2018-09-30

    89

  • 使用缓存的9大误区(上)
    使用缓存的9大误区(上)

    如果说要对一个站点或者应用程序经常优化,可以说缓存的使用是最快也是效果最明显的方式。一般而言,我们会把一些常用的,或者需要花费大量的资源或时间而产生的数据缓存起来,使得后续的使用更加快速。  如果真要细说缓存的好处,还真是不少,但是在实际的应用中,很多时候使用缓存的时候,总是那么的不尽人意。换句话说,假设本来采用缓存,可以使得性能提升为100(这里的数字只是一个计量符号而已,只是为了给大家一个“量”的体会),但是很多时候,提升的效果只有80

    使用,误区,
    2018-09-30

    126

  • OWIN初探
    OWIN初探

    什么是 OWIN ?  OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口, 其目的是为了实现服务器与应用之间的解耦, 鼓励为 .NET Web 应用开发简单模块。  OWIN 是一个开源开放的标准, 有助于建设 .NET 开发的开源生态环境,OWIN 定义了如下几个概念:服务器 (Server)HTTP 服务器直接与客户端交互, 并用 OWIN 语义处理请求,服务器需要一个适配层将客户请求转换 成 OWIN 语义。 支持 OWIN 的服务器有 Katana 和 Nowin 。Web 框架 (Web Framework)构建在 OWIN 之上的自包含的独立组件, 向 Web 应用提供可用的对象模型或者接口。 Web 框架可 能需要一个适配层来转换 OWIN 语义。 支持 OWIN 的 Web 框架有:NancySignalRWebApiFubuMVCSimple.WebDuoVia.HttpWeb 应用 (Web Application)一个特定的 Web 应用, 通常构建在 Web 框架之上, 使用 OWIN 兼容的服务器运行。中间件 (Middleware)特定目的的服务器和应用之间的可插拔组件, 可以监视、 路由、 修改请求与响应。宿主 (Host)应用与服务器所在的进程, 主要负责应用的启动, 有些服务器自身也是宿主, 比如 Nowin 。  为什么使用 OWIN  正如上面所说, OWIN 定义了 .NET Web 服务器与 .NET Web 应用之间的标准接口, 将应用与服务器 解耦, 使得便携式 .NET Web 应用以及跨平台的愿望成为现实, 标准的 OWIN 应用可以在任何 OWIN 兼容的服务器上运行, 不再依赖与 Windows 和 IIS 。  怎么使用 OWIN  OWIN 通过 NuGet 包的形式发布, 获取和使用都非常方便。 下面就先建立一个最简单的 OWIN 应用:打开 Xamarin Studio, 新建一个 C# 命令行程序, 如下图所示:然后打开项目属性, 确认目标框架设置为 Mono/.NET 4.5 , 如下图所示:向项目中添加如下几个 NuGet 包:OwinMicrosoft.OwinMicrosoft.Owin.HostingMicrosoft.Owin.Host.HttpListener添加一个 OWIN Startup 类, 代码如下:public class Startup {    public void Configuration(IAppBuilder appBuilder) {         appBuilder.Run(HandleRequest);     }    static Task HandleRequest(IOwinContext context) {         context.Response.ContentType = "text/plain";        return context.Response.WriteAsync("Hello

    2018-09-30

    131

  • .NET技术+25台服务器怎样支撑世界第54大网站
    .NET技术+25台服务器怎样支撑世界第54大网站

    StackOverflow 是一个 IT 技术问答网站,用户可以在网站上提交和回答问题。当下的 StackOverflow 已拥有 400 万个用户,4000 万个回答,月 PV5.6 亿,世界排行第 54。然而值得关注的是,支撑他们网站的全部服务器只有 25 台,并且都保持着非常低的资源使用率,这是一场高有效性、负载均衡、缓存、数据库、搜索及高效代码上的较量。近日,High Scalability 创始人 Todd Hoff 根据 M

    服务器,世界,支撑,怎样,网站
    2018-09-30

    73

  • .NET中的异步编程-Continuation passing style以及使用yield实现异步
    .NET中的异步编程-Continuation passing style以及使用yield实现异步

    摘要:本来我在本篇文章中想讨论一下.NET世界中已有的几个辅助异步开发的类库,但是经过思考后觉得在这之前介绍一下一些理论知识也许对理解后面的类库以及更新的内容有所帮助。  传统的异步方式将本来紧凑的代码都分成两部分,不仅仅降低了代码的可读性,还让一些基本的程序构造无法使用,所以大部分开发人员在遇到应该使用异步的地方都忍痛割爱。本来我在本篇文章中想讨论一下.NET世界中已有的几个辅助异步开发的类库,但是经过思考后觉得在这之前介绍一下一些理论知识也许对理解后面的类库以及更新的内容有所帮助。今天我们要讨论的是Continuation Passing Style,简称CPS。  CPS  首先,我们看看下面这个方法:   1: public int Add(int a

    实现,使用,以及,编程,
    2018-09-30

    94