手动注册.svc的映射

本来这个应该是由ServiceModelReg.exe完成的WCF的注册的一部分。但是有时系统不灵没办法了。

只能手工注册到同一个dll去handle

svc

应该说.svc的handler还在这层之后,是属于aspnet里的httphandler,但首先需要aspnet_isapi.dll去分配,才能把该后缀的请求送到asp.net里来。

又有机会复习一下基础知识了:值类型和引用类型

essential c# 4里的,c#和c++不一样,不强调值类型的默认modifier是不是public(应该默认都是private,和引用类型一样)。

强调的差异更多的是在构造函数的约束,boxing和unboxing的过程,以及不需要finalize,而这些差别的出发点,都是值类型本身存在的目地就是一个做为值传来传去的过程,这就是它的存在的价值和意义。所以书里也建议,包括网上也有不少地方说到mutable的valueType是不提倡的。

作为一个固定值传来传去,这就直接引出了它和引用类型的差异,或者说,这些差异都是围绕这个目的而产生的。

1.不能有无参数的构造函数。而无参数的构造函数如果存在,会给人一种必然会调用构造函数的假象,但实际如果是通过数组批量构造值类型,就是分配一片初始化为0的内存,没有调用无参数构造函数。而由于field在声明使赋值,如int a=3;会被编译放到构造函数里,没有构造函数的struct也就不能这么做。 而有参数的构造函数就必须责任尽到底,把它的field都初始化过。所以,总的来说,初始化是非常重要的一步,是struct严格要求的地方。

2.boxing的过程,就是先分配个指针(c++的概念,c#内就是引用索引),把栈里的东西拷贝到堆区,然后再指向那个地址。unboxing就相反,也有个拷贝的过程。由于栈区是局部临时性的,会在调用结束后回收,struct也就不需要override Finalize(),写了也不会被调用。

3.接口是引用类型,如果把值类型强制转换为接口,也会发生boxing和unboxing。

3.struct无论如何传递,如果非要改变,那么改变的是它自己,但如果是boxing后作为对象被改变了内部的field,那么受影响的,就是全部的指向它的指针(引用),因为这时它就是引用类型了。

4.一个很好的不区分引用和值类型而赋默认值的办法:http://stackoverflow.com/questions/325426/c-programmatic-equivalent-of-defaulttype