WCF和ASMX WebService的区别是什么
最基本的区别在于,ASMX或者ASP.NET?WebService是用来通过基于HTTP的SOAP来实现通讯。但WCF可以使用任意协议(HTTP,TCP/IP,MSMQ,NamedPipes等),消息封装可以使用任意格式(默认SOAP)。 更多的细节比较,可以参考:WCF?Vs?ASMX 怎么理解WCF的Service?EndPoints? 对于WCF服务来说,Endpoints暴漏了其被调用的方式;客户端必须知道这些细节才能够与服务端进行通讯。每个Endpoints就是用于通信的入口,客户端和服务端通过Endpoint交换信息。一个WCF?Service?Endpoint一般包括3个基本的元素: ·?Address:定义了“WHERE”,一串URL标识了服务的地址; ·?Binding:定义了“HOW”,确定服务器怎么被访问,例如消息发送的传输协议(如TCP,HTTP),安全(如SSL,SOAP消息安全)。 ·?Contract:定义了“WHAT”,即服务提供的内容和契约方式,描述的是消息所包含的内容,以及消息的组织和操作方式,例如是one-way,duplex和request/reply。 1?通过那些方式可以托管WCF?Service? 要托管WCF?Service,必须具备至少一个托管的进行,一个ServiceHost实例和一份正确Endpoint配置。可能的情况如下: 2?托管程序或者自我托管[Managed?Application/?Self?Hosting]: ·?Console?Application ·?Windows?Application ·?Windows?Service 2.????Web?Server托管 ·?IIS?6.0?(ASP.NET?Application?supports?only?HTTP) ·?Windows?Process?Activation?Service?(WAS)?i.e.?IIS?7.0?supports?HTTP,?TCP,?NamedPipes,?MSMQ. 4.????怎样在WCF?Service中启用操作重载(Operation?Overloading?)? 默认情况下,WSDL不支持操作重载,重载行为必须通过OperationContract的Name属性来实现。如下: ??1:?[ServiceContract] ??2:?interface?IMyCalculator ??3:?{ ??4:????[OperationContract(Name?=?"SumInt")] ??5:????int?Sum(int?arg1,int?arg2); ??6:? ??7:????[OperationContract(Name?=?"SumDouble")] ??8:????double?Sum(double?arg1,double?arg2); ??9:?} 这些代码最终会转换成SumInt和SumDouble两个方法。 5.?WCF?有哪些信息交换模式(Message?Exchange?Patterns?)? a.请求/相应模式: 作为默认的MEP,该模式在服务操作被调用同时,向请求者发送回应消息,及时是void类型,也会返回一个空的SAOP包。 b.单工模式: 在某些情况下,我们需要调用服务执行部分特定逻辑,但不需要接受任何反馈,此时我们需要使用单工模式。如果我们需要消息排队,单工模式就是唯一的选择。 c.双工模式: 双工模式简单的说就是双向的信息通道。适合于需要发送消息启动长期运行的进行,并在执行完毕后发回通知的情况。 6.什么是DataContractSerializer,它和XmlSerializer的区域是什么? 序列化的过程就是将一个对象实例转换为可移植并传输的信息格式。所以对于任意的Web服务,序列化都是非常重要的步骤。 从.NET3.0开始,WCF增加了基于显示选择模式(opt-in?)的DataContractSerializer。而XmlSerializer则是否决模式(opt-out)。前者表示我们需要指定需要序列化的内容,而后者则需要指定不需要序列化的内容。 DataContractSerializer比XmlSerializer通常快约10%,但是对于对象如何被序列化几乎无法控制,所以如果需要干预对象的序列化,最好使用XmlSerializer。 7.怎样在WCF中将MessageConract和DataContract分部使用? MessageContract必须整个使用或者不适用。如果我们在服务操作(Operation)的签名上使用了MessageContract,那么操作符它就只能作为操作的唯一参数类型和返回值类型。 8.如果要取代已有的ASMX?WebService,应该使用哪种标准绑定方式? basicHttpBinding方式绑定的WCF?Service,与ASMX/ASP.NET?web?service的表现几乎一致。 9.简述WCF中的实例模式? WCF总是将请求绑定了一个特定的服务实例,因此可能的模式包括: Per?Call:每次调用都创建一个实例,能够有效利用内存,但需要使用特别手段来维护Session。 Per?Session:为每个用户的整个会话期建立一个实例。 Single:所有终端和用户共享唯一的会话,内存效率最低。 9.简述WCF中的安全模式?解析传输层和消息层安全的不同。 在WCF中,我们可以在不同的级别上定义安全性配置: a.传输层安全 传输层安全需要考虑消息在物理链路上的完整性、私密性和认证,它依赖于Binding方式,因为大部分的Binding本身都包含了内置的安全处理。 ??1:?<netTcpBinding> ??2:?<binding?name="netTcpTransportBinding"> ??3:????<security?mode="Transport"> ??4:???????????????<Transport?clientCredentialType="Windows"?/> ??5:????</security> ??6:?</binding> ??7:?</netTcpBinding> b.消息层安全 消息层安全通常是指消息的加密。 ??1:?<wsHttpBinding> ??2:?<binding?name="wsHttpMessageBinding"> ??3:???<security?mode="Message"> ??4:???????????????<Message?clientCredentialType="UserName"?/> ??5:???</security> ??6:??</binding> ??7:?</wsHttpBinding> 这种安全性通常依赖于需求,但是我们可以使用一种复合的安全模式,如下: ??1:?<basicHttpBinding> ??2:?<binding?name="basicHttp"> ??3:???<security?mode="TransportWithMessageCredential"> ??4:??????????????<Transport?/> ??5:???????????????????<Message?clientCredentialType="UserName"?/> ??6:???</security> ??7:?</binding> ??8:?</basicHttpBinding> ? 原文:http://www.codeproject.com/Articles/426776/WCF-Top-10-Interview-Questions (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |