本来这个应该是由ServiceModelReg.exe完成的WCF的注册的一部分。但是有时系统不灵没办法了。
只能手工注册到同一个dll去handle
应该说.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
这东西有时候是prohibited, 就会出现普通的404 not found error!!!!