<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[老程序员]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wangchongcy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangchongcy]]></copyright><item><title><![CDATA[WCF——消息筛选]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/8792784</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/8792784</guid><author>wangchongcy</author><pubDate>Fri, 12 Apr 2013 13:10:21 +0800</pubDate><description><![CDATA[ChannelDispatcher根据消息进行EndpointDispatcher的选择的机制称为消息筛选（MessageFilter）。消息筛选依赖于EndpointDispatcher两个重要的对象：AddressFilter和ContractFilter，它们分别实现基于终结点地址和服务契约的消息筛选。
 
相关类图如下：





在默认情况下，EndpointDispat]]></description><category></category></item><item><title><![CDATA[WCF——AddressHeader]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/8792769</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/8792769</guid><author>wangchongcy</author><pubDate>Fri, 12 Apr 2013 13:08:45 +0800</pubDate><description><![CDATA[终结点寻址由EndpointAddress类表示，作为EndpointAddress的一个属性，AddressHeader也参与到了终结点的寻址。
 
如果一个Service的Endpoint指定了header，而客户端没有指定，将会抛出EndpointNotFoundException:



服务端配置文件：]]></description><category></category></item><item><title><![CDATA[WCF——终结点地址]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/8792746</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/8792746</guid><author>wangchongcy</author><pubDate>Fri, 12 Apr 2013 13:05:03 +0800</pubDate><description><![CDATA[在WCF中，每个终结点都包含两个不同的地址：逻辑地址和物理地址。逻辑地址就是以终结点Address属性表示的地址。至于物理地址，对于消息发送端来讲，就是消息被真正发送的目的地址；而对于消息接收端来讲，就是监听器真正监听的地址，也称为监听地址。
 
逻辑地址
终结点的逻辑地址由EndpointAddress类来表示，用于查找和标识终结点。该类包含Uri属性、一组可选的Headers属性（定义到]]></description><category></category></item><item><title><![CDATA[从锤子手机发布说起]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/8788845</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/8788845</guid><author>wangchongcy</author><pubDate>Thu, 11 Apr 2013 16:04:27 +0800</pubDate><description><![CDATA[最近把小米手机的MIUI升级到14.0，发现用户体验较之前的MIUI12.0好一些，也恰好和帖子中锤子的UI有几分神似。


怎么说呢，刚升级时新的MIUI给我震撼不小，但是用了两天发觉也就这样了，电池依旧要一天一充，操作系统还是Android4.1，功能没有任何增强，我依旧在使用界面没有变化的新浪微博、百度地图。。。


于是这两天我发现为什么叫MIUI，MI表示小米，UI表示用户界]]></description><category></category></item><item><title><![CDATA[ASP.NET MVC——Action的执行]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/8754270</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/8754270</guid><author>wangchongcy</author><pubDate>Wed, 03 Apr 2013 09:22:50 +0800</pubDate><description><![CDATA[Action的执行是根据在路由过程中得到的Action的名称执行响应的Controller中的方法，相关类如图：


IActionInvoker接口用于执行指定名称的Action方法；IModelBinder接口根据ControllerContext和Model名称和类型得到一个作为参数的对象。]]></description><category></category></item><item><title><![CDATA[ASP.NET MVC——Controller的激活]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/8749920</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/8749920</guid><author>wangchongcy</author><pubDate>Tue, 02 Apr 2013 10:02:52 +0800</pubDate><description><![CDATA[Controller的激活是根据在路由过程得到的Controller名称来创建对应的Controller对象。相关类如图：



 
Controller激活的过程可通过如下序列图表示：



代码示例如下：


            string controllerName = this.RequestContext.RouteData.Controller;]]></description><category></category></item><item><title><![CDATA[ASP.NET MVC——路由]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/8736464</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/8736464</guid><author>wangchongcy</author><pubDate>Fri, 29 Mar 2013 14:14:01 +0800</pubDate><description><![CDATA[路由的主要责任是将来自浏览器的请求映射到MVC的controller
 action。
.NET中路由相关的类如图所示：





路由主要体现在两部分：路由注册和请求映射：
 
一、路由注册：
路由注册比较简单，就是向路由表(RouteCollection)中添加路由：
        public static void RegisterRoutes(RouteColl]]></description><category></category></item><item><title><![CDATA[RabbitMQ安装与监控]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/8203722</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/8203722</guid><author>wangchongcy</author><pubDate>Tue, 20 Nov 2012 14:46:08 +0800</pubDate><description><![CDATA[安装
首先安装Erlang Windows Binary Files，然后安装rabbitmq-server-3.0.0.exe，安装过程可参考http://www.rabbitmq.com/install-windows.html


监控
RabbitMQ提供了一个web的监控页面系统，这个系统是以Plugin的方式进行调用的。

运行下面命令来启用管理插件：

 rabbi]]></description><category></category></item><item><title><![CDATA[显示索引]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7974785</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7974785</guid><author>wangchongcy</author><pubDate>Thu, 13 Sep 2012 14:06:38 +0800</pubDate><description><![CDATA[LINQ中的很多函数都有对应的包含索引的重载版本，例如：下面的代码

                var authors = new List()
                {
                    new Author() { FirstName = "Fabric", LastName = "Marguarie" },]]></description><category></category></item><item><title><![CDATA[嵌套集合]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7971119</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7971119</guid><author>wangchongcy</author><pubDate>Wed, 12 Sep 2012 14:55:01 +0800</pubDate><description><![CDATA[问题描述：
对于下面的定义和初始化数据

public class Author
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public class Book
    {
        public string Na]]></description><category></category></item><item><title><![CDATA[IQueryable在LINQ中]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7965831</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7965831</guid><author>wangchongcy</author><pubDate>Tue, 11 Sep 2012 09:48:19 +0800</pubDate><description><![CDATA[IQueryable接口定义如下： 

    // 摘要:
    //     提供对未指定数据类型的特定数据源的查询进行计算的功能。
    public interface IQueryable : IEnumerable
    {
        // 摘要:
        //     获取在执行与 System.Linq.IQueryable 的此实例关联的表达式目录树时返回]]></description><category></category></item><item><title><![CDATA[LINQ应用]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7964282</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7964282</guid><author>wangchongcy</author><pubDate>Mon, 10 Sep 2012 17:21:40 +0800</pubDate><description><![CDATA[下面是关于LINQ应用的一些场景，其中的相关要点在代码的注释中。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Serv]]></description><category></category></item><item><title><![CDATA[C#高级程序设计（十）——LINQ]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7917011</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7917011</guid><author>wangchongcy</author><pubDate>Tue, 28 Aug 2012 17:16:35 +0800</pubDate><description><![CDATA[LINQ统一了数据访问方式，它是程序语言与数据之间的桥梁。LINQ框架如图所示：它主要由三部分组成：语言扩展、LINQ构建块和提供程序集。


对于如下代码：
varquery = from book in SampleData.Books
where book.Title == "Funny Stories"
orderby book.Title
select new {book.]]></description><category></category></item><item><title><![CDATA[C#高级程序设计（九）——表达式树]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7916708</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7916708</guid><author>wangchongcy</author><pubDate>Tue, 28 Aug 2012 16:25:53 +0800</pubDate><description><![CDATA[表达式树的设计是基于"code as data"的思想，它把代码表示成树状的数据结构，树状结构中的每个节点都是一个表达式（这个表达式是一个广义的概念，并不是编程语言中所指的表达式语法），因此称为表达式树。

表达式树的本质在于将代码组织在数据段，而不是代码段，这对于运行时更改代码是非常重要的。

System.Linq.Expressions命名空间下含有很多类来表示不同的表达式，这些类都]]></description><category></category></item><item><title><![CDATA[C#高级程序设计（八）——Lambda表达式]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7915999</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7915999</guid><author>wangchongcy</author><pubDate>Tue, 28 Aug 2012 16:25:18 +0800</pubDate><description><![CDATA[Lambda 表达式”是一个匿名函数，它可以包含表达式和语句，并且可用于创建委托或表达式树类型。

所有 Lambda 表达式都使用 Lambda 运算符 =>，该运算符读为“goes to”。 该 Lambda
 运算符的左边是输入参数（如果有），右边包含表达式或语句块。 

Lambda表达式的基本形式是：


(explicitly-typed-parameter-list)]]></description><category></category></item><item><title><![CDATA[C#高级程序设计（七）——迭代]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7911853</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7911853</guid><author>wangchongcy</author><pubDate>Mon, 27 Aug 2012 15:09:03 +0800</pubDate><description><![CDATA[.NET使用IEnumerator接口和IEnumerable接口（以及它们的泛型版本）实现迭代器模式，迭代是LINQ的核心。
接口定义如下：

    public interface IEnumerable
    {
        IEnumerator GetEnumerator();
    }

    public interface IEnumerator
    {]]></description><category></category></item><item><title><![CDATA[C#高级程序设计（六）——匿名方法]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7903092</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7903092</guid><author>wangchongcy</author><pubDate>Fri, 24 Aug 2012 14:15:23 +0800</pubDate><description><![CDATA[在 2.0 之前的C# 版本中，声明委托的唯一方法是使用命名方法。 C#
 2.0 引入了匿名方法，而在 C# 3.0 及更高版本中，Lambda 表达式取代了匿名方法，作为编写内联代码的首选方式。 不过，本主题中有关匿名方法的信息同样也适用于
 Lambda 表达式。 有一种情况下，匿名方法提供了
 Lambda 表达式中所没有的功能。 您可使用匿名方法来忽略参数列表。 这意味着匿名方法可]]></description><category></category></item><item><title><![CDATA[C#高级程序设计（五）——代理中的协变和逆变]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7899847</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7899847</guid><author>wangchongcy</author><pubDate>Thu, 23 Aug 2012 15:06:27 +0800</pubDate><description><![CDATA[将方法签名与代理类型匹配时，协变和逆变为您提供了一定程度的灵活性。协变允许方法具有的派生返回类型比委托中定义的更多。逆变允许方法具有的派生参数类型比委托类型中的更少。

一、逆变
对于下面的三个代理类型：
delegate void EventHandler (object sender, EventArgs e)
delegate void KeyPressEventHandler (o]]></description><category></category></item><item><title><![CDATA[C#高级程序设计（四）——代理中的Method Group转换]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7898476</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7898476</guid><author>wangchongcy</author><pubDate>Thu, 23 Aug 2012 10:15:04 +0800</pubDate><description><![CDATA[在前面代理对象初始化中提到过Method Group特性，C#编译器能将method  group隐式转换成其兼容的代理对象。例如： 

Feedback fbInstance = FeedbackToFile;
method group是一组方法的名称，之所以被称为方法组，是因为方法具有重载的特性，每个方法名称都可能有若干的signature。例如： 


void MyMethod]]></description><category></category></item><item><title><![CDATA[C#高级程序设计（三）——泛型]]></title><link>https://blog.youkuaiyun.com/wangchongcy/article/details/7873214</link><guid>https://blog.youkuaiyun.com/wangchongcy/article/details/7873214</guid><author>wangchongcy</author><pubDate>Tue, 21 Aug 2012 15:42:40 +0800</pubDate><description><![CDATA[在C#引入泛型之前，如果一个类或者一个方法想要支持多种类型，它就不得不把相应的参数或者返回值定义为object类型，这就意味着代码在执行的过程中需要很多的转型，并不是说你的代码一定不要用到转型，但是转型确实会带来很多潜在的问题，因为它将本该属于编译时的类型检查延迟到了运行时，而且也会带来一定的性能问题（装箱和拆箱）。
C#2引入了泛型，包括两种形式的泛型：泛型类型和泛型方法。下面说一下和泛型有关]]></description><category></category></item></channel></rss>