Net面试题进阶篇
Posted 渣渣猿~波波
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Net面试题进阶篇相关的知识,希望对你有一定的参考价值。
OOP: Object Oriented Programming:
面向对象编程技术的关键性观念是它将数据及对数据的操作行为放在一起,作为一个相互依存、不可分割的整体——对象。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。
AOP(面向切面编程)
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
OIP
面向接口软件设计是一种软件设计模式,面向接口编程可以更好的降低系统的耦合度,实现高内聚的软件实现的一种手段。
PO
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以。
net2.0和3.5的区别?
NET 3.5在2.0的基础上加入了一些新的语法和特性,主要增加了:
WPF是原WINFORM的替代方案,使用DX底层显示驱动实现界面绘图,性能更好.
WCF是原webservice、COM+等分布式应用的替代方案.
LINQ更强大的内存对象查询语言
WF MS的workflow
SILVERLIGHT MS的RIA工具,在B/S上获得更好的用户体验.
.net framework各个版本介绍:
.NET框架 1.0 发行于2002年
.NET框架 1.1 发行于2003年
.NET框架 2.0 发行于2005年 Visual Studio 2005、SQL Server 2005
.NET框架 3.0 发布日期2006/11/21
新增3个主要技术:
Windows Presentation Foundation(WPF):提供更佳的用户体验,用来开发Windows Forms程序以及流览器应用程序.
Windows Communication Foundation(WCF):提供SOA(面向服务的软件构架)支持的安全的网络服务(Web Service)框架。
Windows Workflow Foundation(WF):提供一个设计与发展工作流程导向(Workflow-oriented)应用程序基础支持的应用程序接口。
.NET框架 3.5 Visual Studio 2008
新增了以下新特性:
LINQ, Language-Integrated Query
扩展方法(Extension Method)属性(Attribute)用于为扩展方法提供支持LINQ支持,包括LINQ to Object、LINQ to ADO .NET以及LINQ to XML表达式目录树,用于为Lambda表达式提供支持与语言集成查询 (LINQ)和数据感知紧密集成。
WCF服务的全新Web协议支持,包括AJAX、JSON、REST、POX、RSS、ATOM和若干新的WS-*标准。
Visual Studio 2008中面向WF、WCF和WPF的完整工具支持。
ADO .NET Entity Framework
.NET框架 4.0
.NET框架 4.0主要增加了并行支持,异步编程。
SQL SERVER 2008 中三种分页方法与比较
分页方案一:(利用Not In和SELECT TOP分页)
SELECT TOP 10 * FROM TableName WHERE ID NOT IN (SELECT TOP 20 id FROM TableName ORDER BY id) ORDER BY ID
通过SQL 查询分析器,显示比较:我的结论是:
分页方案一:(利用Not In和SELECT TOP分页) 效率高,但需要拼接SQL语句
分页方案二:利用Row Number完成分页,效率最高,但也需要拼接SQL语句
以上两种,可以使用存储过程封装使用。
分页方案二:利用Row Number完成分页
SELECT * FROM
(SELECT ROW_NUMBER() OVER(ORDER BY id asc) AS rownum, id FROM company ) AS D
WHERE rownum BETWEEN (@pageIndex-1)*@pageSize+1 AND @pageIndex*@pageSize
ORDER BY id asc
Cookie和Session区别与工作机制比较
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上,通过SessionID 标识符来读取服务上存储的数据。
session,默认为20分钟
当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
session是通过cookie的机制来实现的,保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发给服务器。由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx; jsessionid=ByOK ... 99zWpBng!-145788764 另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=ByOK ... 99zWpBng!-145788764
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
Cookie和Session的工作机制比较详细说明
http://www.cnblogs.com/notifier/archive/2010/10/11/1847959.html
列举ASP.NET 页面之间传递值的几种方式。
ASP.Net页面生命周期
页面初始化 Page_Init
加载View State LoadViewState
回发数据处理 LoadPostData
页面加载 Page_Load
回发通知 RaisePostDataChangedEvent
回发事件处理 RaisePostBackEvent
页面预渲染 Page_PreRender
保存 viewstate SaveViewState
Page渲染 Page_Render
Page 卸载 Page_UnLoad
什么是装箱和拆箱?
答:从值类型接口转换到引用类型即为装箱。从引用类型转换到值类型即为拆箱。
什么是协变和抗变(逆变)
协变,可以理解成:父类 -> 子类。父类的对象用子类替换,也可以理解成子类当父类用。
抗变,可以理解成:子类 -> 父类。子类的对象用父类替换,也可以理解成父类当子类用。抗变也常常翻译为逆变。
Abstract Class抽象类
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
通常在编程语句中用 abstract 修饰的类是抽象类。
什么是Interface?它与Abstract Class有什么区别?
抽象类与接口的区别
抽象类与接口的区别
什么时候使用抽象类,什么时候用接口
接口用于规范,抽象类用于共性。接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。抽象类可以提供某些方法的部分实现,接口则不可以.
抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。
在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要 重新编写。
接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员。
此外接口不能包含字段、构造函数、析构函数、静态成员或常量。
接口和抽象类的相似之处有三点:
1、不能实例化;
2、包含未实现的方法声明;
3、派生类必须实现未实现的方法及成员(抽象类是抽象方法,接口则是所有成员)。
const和readonly有什么区别?
const关键字用来声明编译时常量,readonly用来声明运行时常量。
密封类sealed的作用
sealed 类不允许有派生类。如果一个密封类被指定为其他类的基类,则发生编译时错误。
密封类不能同时为抽象类。
sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
解释virtual、sealed、override和abstract的区别
virtual申明虚方法的关键字,说明该方法可以被重写
sealed说明该类不可被继承
override重写基类的方法
abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。
重写(Override)和重载(Overload)有什么区别?
答:重载Overload是方法名称相同, 不同的参数类型,不同的参数个数,不同的参数顺序,可以完成重载。
重写Override提供了子类中覆盖父类中虚方法行为的实现(是进行基类中函数的重写)。
C#中的委托是什么?事件是不是一种委托?
委托 可以把一个方法作为参数代入另一个方法,并完成调用。委托可以理解为指向一个函数方法的引用。是一种特殊的类。
委托类似于 C++ 函数指针,但它是类型安全的。
委托可用于定义回调方法。
委托与事件的区别:
事件是基于委托实现的, 委托通过使用delegate关键词定义,委托可以在客户代码中直接调用委托来调用委托所指向的方法,而事件不可以,事件通过在委托基础之上,使用event关键词定义,事件所指向的方法的触发只能由代码自己完成,也就是在代码中委托你不但可以安排谁是它的调用者,还可以直接调用它,而事件一般不直接调用,只能通过某些操作间接触发。
C#中的堆和栈
栈(Stack)由系统管理生存期,存储代码执行和调用路径,执行或调用完毕即从栈中清除;
堆(Heap)中保存值和对象,调用完毕之后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除
C# ref与out区别:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
HttpWebRequest和WebClient的区别:
1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();
其Method指定了请求类型,这里用的GET,还有POST;也可以指定ConentType;
其请求的Uri必须是绝对地址;
其请求是异步回调方式的,从BeginGetResponse开始,并通过AsyncCallback指定回调方法;
2. WebClient 方式使用基于事件的异步编程模型,在HTTP响应返回时引发的WebClient回调是在UI线程中调用的,因此可用于更新UI元素的属性,例如把 HTTP响应中的数据绑定到UI的指定控件上进行显示。HttpWebRequest是基于后台进程运行的,回调不是UI线程,所以不能直接对UI进行操作,通常使用Dispatcher.BeginInvoke()跟界面进行通讯。
WebRequest类
命名空间: System.Net
发出对统一资源标识符 (URI) 的请求。这是一个抽象类。
WebRequest 是 .NET Framework 的用于访问 Internet 数据的请求/响应模型的抽象基类。使用该请求/响应模型的应用程序可以用协议不可知的方式从 Internet 请求数据。在这种方式下,应用程序处理 WebRequest 类的实例,而协议特定的子类则执行请求的具体细节。
请求从应用程序发送到某个特定的 URI,如服务器上的 Web 页。URI 从一个为应用程序注册的 WebRequest 子代列表中确定要创建的适当子类。注册 WebRequest 子代通常是为了处理某个特定的协议(如 HTTP 或 FTP),但是也可以注册它以处理对特定服务器或服务器上的路径的请求。
WebClient 类:
提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。不能继承此类。
WebClient 类提供向 URI 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法。
WebClient 类使用 WebRequest 类提供对 Internet 资源的访问。WebClient 实例可以通过任何已向 WebRequest.RegisterPrefix 方法注册的 WebRequest 子代访问数据。
你对泛型了解吗?简单说明一下泛型的有什么好处?
泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用
好处是类型安全和减少装箱、拆箱的性能消耗。
提高程序性能、减少类型安全检查、提高代码质量,减少重复性的编程代码。
New的三种用法
在 C# 中,new 关键字可用作运算符、修饰符或约束。
new 运算符 用于创建对象和调用构造函数。
new 修饰符 用于向基类成员隐藏继承成员。
new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。搜索
String类与StringBuilder类有什么区别?
stringBuilder比string更节约内存,所以stringBuilder更快
String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运算时,都要在内存中创建一个新的字符串对象,开辟一个新的空间。
StringBuilder 则不会。在需要对字符串执行重复修改的情况下,创建新的 String 对象系统开销可能会非常昂贵。 比如当在循环中,需要将字符串多次结果累加时,使用 StringBuilder 类可以提升程序性能。
HashMap和Hashtable的区别
答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.
GET与POST的区别
(1)get可以从服务器上获取数据,向服务器传送数据可以使用get、post。
(2)在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
(3)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
(4)GET方式提交的数据最多只能有2KB,而POST则没有此限制。
(5)安全性问题。正如在上述提到,使用 Get的时候,参数会显示在地址栏上,而 Post 不会。所以,如果数据是字符类数据而且是非敏感数据,那么可以使用 get 传递;如果用户输入的数据不是字符类数据,如文件。而且包含敏感数据,那么还是使用 post为好。
提高.NET项目的性能
1 使用异步方式调用Web服务和远程对象, 只要有可能就要避免在请求的处理过程中对Web服务和远程对象的同步调用,因为它占用的是的ASP.NET 线程池中的工作线程,这将直接影响Web服务器响应其它请求的能力。
2 使用适当的Caching策略来提高性能
3 判断字符串,不要用""比较。
//避免
if(strABC!=null && strABC!="") {}
//推荐
if(!strABC.IsNullOrEmpty(strABC)) {}
4 页面优化,页面静态化、页面缓存技术等技术
5 用完马上关闭数据库连接
6 尽量使用存储过程,并优化查询语句
7 只读数据访问用SqlDataReader,不要使用DataSet,但要注意DataReader的关闭问题。
net中有哪几种缓存?缓存的优点是?
整页缓存 @OutputCache指令
局部缓存 @OutputCache指令
应用程序缓存Cache类、Response.Cache对象
缓存好处:缓存是网站性能优化不可缺少的一种数据处理机制,他能有效的缓解数据库压力
例:<%@OutputCache Duration="5"VaryByParam="none"%>
<%@OutputCache Duration="5"VaryByParam="none“ VaryByControl=a"TextBox"%>
VaryByParam属性基于使用post或者get方式发送的名称/值对来改变缓存。
VaryByControl属性通过用户控件文件中包含的服务器控件来改变缓存。
MVC中的页面缓存实现?
· public class HomeController : Controller
· {
· [OutputCache(Duration = 5, VaryByParam = "none")]
· public ActionResult Index()
· {
· return View();
· }
· }
缓存更新
在项目启动时,我们可以将数据库中的需要缓存的数据,一次性将全部缓存到memcached各个Key当中。当数据库中的相关表数据发生变化时,可以根据不同的Key进行缓存版本的更新。对于一些数据量大的表或者不需要即时显示的数据,我们可以采取一些策略:定时更新或根据更新的数据条目来判断是否需要更新。在缓存更新前,应首先判断是否有数据发生变化,如果未发现变化,则无需更新缓存。
CTS、CLS、CLR分别作何解释?
CTS:通用语言系统。
CLS:通用语言规范。
CLR:公共语言运行库。
什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行的代码。
什么是 RTTI 强类型系统?
答:强类型系统是对数据类型有严格的要求和限制,每一个变量和每一个表达式都有类型,在使用一个变量前系统都会进行类型检查。
什么是托管代码?
托管代码:使用CLR编译语言编辑器开发编写的代码就叫托管代码。
O/R Mapping 的原理 ORM
答:利用反射技术或配置文件方式将对象和数据库中的表作一个映射。
什么是ORM?
Object Relational Mapping对象关系数据库映射工具用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去,通俗一点讲,就是按表结构 映射 出一个类,在具体开发中使用该类来完成对表的相关操作。
常见的ORM框架说明
Nhibernate
NHibernate是一个基于.Net的针对关系型数据库的对象持久化类库。
Nhibernate来源于非常优秀的基于Java的Hibernate关系型持久化工具。
NHibernate从数据库底层来持久化你的.Net对象到关系型数据库。
NHibernate为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联。
NHibernat自动产生SQL语句,并确保对象提交到正确的表和字段中去。
定义二
Nhibernate是全自动化的ORM框架。Nhibernate减少了开发代码量及sql编写的开发工作,因为hibernate是映射到表的会把我们要用到的增、删、改的SQL语句都封装了,我们不需要再自己手动写,直接调用即可,不过他也有确定不适合统计查询系统。对于多表连查,复杂的sql实现比较复杂,而且有可能需要借助其他方案,并且由于自动生成sql语言,所以无法直接对sql语句进行优化。
IBatis
iBatis 是又ORM工具之一,是一种“半自动化”的ORM实现。
iBatis 是轻量级的ORM框架.它不象NHibernate那样映射到表,而是映射到SQL语句与存储过程。在项目中Ibatis可以增强系统的可维护性:通过业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护。iBatis 需要自己提前将sql入到配置文件中,这样直接优化sql语句,有利也有弊。当然还要写实体类,写配置文件比较麻烦一些。
EF
ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,现已包含在 Visual Studio中,可以直接用以开发数据库应用,要求在.NET3.5以上平台。目前主要支持SqlServer数据库,开发快捷,代码维护量少。
什么是反射?
答:反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。
通过反射技术,可以动态的获取有关已加载程序集和在其中定义的类型(如类、接口和值类型)的信息。使用反射在运行时可以创建类型实例,以及调用和访问这些实例的成员。
反射通常需要用到的类,及其作用
(1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
(2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
(3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法来调用特定的构造函数。
(4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法来调用特定的方法。
(5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
(6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
(7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
(8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。
什么是WebService
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。是实现SOA分布式应用程序的一种手段。WebService采用HTTP协议传输数据,采用XML格式封装数据,即以SOAP传递消息。
什么是WSE?目前最新的版本是多少?
答:WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,目前最新版本2.0
.net remoting和WebService两项技术的应用。
答:WebService主要是可利用HTTP,可以轻易穿透防火墙,使用的是SOAP消息机制。Remoting使用底层TCP/IP协议,使用二进制传送数据,效率高。
Remoting采用的RPC远程进程调用.
Web Service能用于不同平台,不同语言的跨平台开发。.net Remoting只适用于.Net。 效率上Remoting高于Xml Web Service
WCF
Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,即Windows 通讯开发平台。其整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并支持HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议。目前WCF是Windows平台上开发SOA分布式应用的不错选择。WCF可以用于应用程序接口开发。
WCF主要包括以下部分:
四种契约(描述了该服务的功能和作用)
服务契约(WCF服务的对外接口作定义和声明)
数据契约(定义了服务端和客户端之间要传送的自定义数据类型。)
错误契约(错误类型)
消息契约(消息的格式)
寄宿(部署方式)
IIS承载、WAS承载(IIS7.5以上支持)、应用程序承载(也称自承载)
服务行为
消息(消息的传输方式、消息的编码与解码、安全性)
WCF一个服务终结点主要由:Address、Binding、Contract构成。
Address: Address通过一个URI唯一地标识一个Endpoint,并告诉潜在的WCF service的调用者如何找到这个Endpoint。
Binding: Binding实现在Client和Service通信的所有底层细节。
Contract: Contract的主要的作用是暴露某个WCF Service所提供的所有有效的功能。
WCF加密方式、身份验证:
1. 无身份验证: 所有的调用者都能访问服务
2.Windows身份验证:Kerberos(有域服务器)和NTLM(工作组)
3.用户名与密码: 客户端向服务端发送一个用户名和密码,服务端通过一些凭证库来验证
4.X509证书: 客户端包含一个证书,服务端预先知道这些证书,当客户端发送请求时,服务端会验证客户端的证书。(通过makecert.exe 生成服务端证书、客户端证书,通过证书来验证用户身份)
5.定制机制: 允许开发者任意使用一种身份验证机制
6.发布口令: 调用者与服务同事依赖一个安全口令
WCF 中可以使用不同的安全方式来实现数据传输安全。
•None 指定客户端不需要提供凭据。这相当于匿名客户端。
•Windows 允许在使用 Windows 凭据建立的安全上下文中交换 SOAP 消息。
•UserName、Password允许服务可以要求使用用户名凭据对客户端进行身份验证。
•Certificate 允许服务可以要求使用 X.509 证书对客户端进行身份验证。
•IssuedToken 根据安全策略配置的自定义令牌类型。默认令牌类型为安全断言标记语言 (SAML)。令牌由安全令牌服务颁发。
常用的调用WebService、WCF的方法有哪些?
答:1.使用命令行工具(WSDL.exe或svcutil.exe)。
-
使用VS.NET中的添加Web引用或添加服务引用
解释一下UDDI、WSDL的意义及其作用。
答:
UDDI即统一描述、发现和集成协议。
作用:用来说明一个服务的一些信息类型,帮助服务的请求者确定如下问题:
How : 服务如何使用,相关描述信息位置,如何与服务通讯,就是协议是什么。
Where:服务在网络中的所处位置。
WSDL: Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言。
WSDL用来提供对服务的描述,它的主要构成要素有五个:
-
Types: 定义WSDL定义中所用到的数据类型,即XML Schema Types
-
Message : 对一组消息的输入和输出参数的定义
3)PortType : 定义Web服务的操作
4) Binding :描述特定服务接口的协议、数据格式、安全性和其它属性.
5) Services : 制定特定服务的URL和提供的调用接口,包含一组端口元素
什么是SOAP?
答:SOAP(Simpe Object Access Protoco )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。
SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。
SOAP 定义了一种方法以便将 XML 消息从 A 点传送到 B 点。为此,它提供了一种基于 XML且具有以下特性的消息处理框架:1) 可扩展,2) 可通过多种底层网络协议使用,3) 独立于编程模型。
WCF的三种实例模式:
在WCF通过服务行为ServiceBehavior 的InstanceContextMode枚举进行设置.InstanceContextMode有三种枚举类型
PerSession=0 会话实例,此为默认值
PerCall=1
Single=2
PerSession实例行为
PerSession表示会话实例行为,当客户端调用服务器后,服务器端会为客户端分配一个新的服务实例,这个实例在服务器端SESSION时间过期后将失效。客户端每调用一次服务,在客户端生成一个新的代理实例,都会产生一个新的会话。
PerSession实例行为有点类似于ASP.NET中的session,但又些不同.
在WCF中使用PerSession实例,需要手动设置行为
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)], 默认情况下,WCF的实例行为为PerSession
在WCF中,并不是所有通信协议都可以使用PerSession实例行为的,只有支持会话的通信协议才可以使用PerSession实例,如:NetTcpBinding, NetNamePipeBinding,wsHttpBinding, wsFederationHttpBinding,wsDualHttpBinding.
PerCall实例行为
PerCall实例策略是指WCF为每个客户端的每一次请求,都会生成一个新的服务实例,各个实例不会相互影响,客户端调用结束后,服务器端立刻销毁该实例.
Single实例行为
类似于单件设计模式,所有可以客户端共享一个服务实例,这个服务实例是一个全局变量,该实例第一次被调用的时候初始化,到服务器关闭的时候停止。
设置服务为Single实例行为,只要设置 [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]即可。
Web API
1、ASP.NET MVC4中的Web API提供了很好的API接口开发方式。可以更好地适应现在的跨平台移动互联网开发。相信大家很多的项目现在都在使用Web Service作为提供数据的接口。好吧,那么Web API(http)将是用来革Web Service(http、https)的命。
2、Web API 框架是一个面向 Http 协议的通信框架。相对于 WCF 而言,Web API 只面向于 Http 协议设计,而且没有 WCF 那么繁琐的配置。Web API 的开发类似于 ASP.NET MVC 中控制器的开发,但是相对于直接使用 ASP.NET MVC 来返回 Json 对象的方式而言,Web API 封装了数据的序列化、反序列化,接口、实现都更加简单。
简单地说,如果要向浏览器、移动端提供 Json、XML 数据格式的 API,则应该首选 Web API 作为通信框架。
-
WebAPI用于提供REST风格的WebService,个人比较喜欢REST风格的WebService,感觉比SOAP要轻量级一些,而且对客户端的要求也更少,更符合网络数据传输的一般模式,客户端完全摆脱了代理和管道来直接和WebService进行交互。
WebAPI数据序列化
Web API 框架目前支持两种数据格式的序列化:Json 及 Xml。在不做任何配置的情况下,如果 Http 请求中,HttpHeader 中 Accept 被指定为 accept: application/xml,则 Web API 会自动把数据使用 xml 进行序列化,否则使用 json 序列化。
net Remoting 的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
C#中params关键字的作用理解:
params 关键字可以指定在参数数目可变处采用参数的方法参数。主要是当参数为数组并且长度未知时,可以使用。
public static void UseParams(params object[] list)
PDB是什么东西?
PDB是用于保存调试和项目状态信息的文件,在debug的时候将产生pdb文件,调试的时候应该放在和对应应用
程序集相同目录。
根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?
public void test(int i)
面试题-Python 进阶