加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WCF和ASMX WebService的区别是什么

发布时间:2020-12-17 00:11:53 所属栏目:安全 来源:网络整理
导读:最基本的区别在于, ASMX 或者 ASP.NET?WebService 是用来通过基于 HTTP 的 SOAP 来实现通讯。但 WCF 可以使用任意协议( HTTP,TCP/IP,MSMQ,NamedPipes 等),消息封装可以使用任意格式(默认 SOAP )。 更多的细节比较,可以参考: WCF?Vs?ASMX 怎么理解 WC

最基本的区别在于,ASMX或者ASP.NET?WebService是用来通过基于HTTPSOAP来实现通讯。但WCF可以使用任意协议(HTTP,TCP/IP,MSMQ,NamedPipes等),消息封装可以使用任意格式(默认SOAP)。

更多的细节比较,可以参考:WCF?Vs?ASMX

怎么理解WCFService?EndPoints

对于WCF服务来说,Endpoints暴漏了其被调用的方式;客户端必须知道这些细节才能够与服务端进行通讯。每个Endpoints就是用于通信的入口,客户端和服务端通过Endpoint交换信息。一个WCF?Service?Endpoint一般包括3个基本的元素:

·?Address:定义了WHERE,一串URL标识了服务的地址;

·?Binding:定义了HOW,确定服务器怎么被访问,例如消息发送的传输协议(如TCPHTTP),安全(如SSLSOAP消息安全)。

·?Contract:定义了WHAT,即服务提供的内容和契约方式,描述的是消息所包含的内容,以及消息的组织和操作方式,例如是one-way,duplexrequest/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不支持操作重载,重载行为必须通过OperationContractName属性来实现。如下:

??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:?}

这些代码最终会转换成SumIntSumDouble两个方法。

5.?WCF?有哪些信息交换模式(Message?Exchange?Patterns?

a.请求/相应模式:

作为默认的MEP,该模式在服务操作被调用同时,向请求者发送回应消息,及时是void类型,也会返回一个空的SAOP包。

b.单工模式:

在某些情况下,我们需要调用服务执行部分特定逻辑,但不需要接受任何反馈,此时我们需要使用单工模式。如果我们需要消息排队,单工模式就是唯一的选择。

c.双工模式:

双工模式简单的说就是双向的信息通道。适合于需要发送消息启动长期运行的进行,并在执行完毕后发回通知的情况。

6.什么是DataContractSerializer,它和XmlSerializer的区域是什么?

序列化的过程就是将一个对象实例转换为可移植并传输的信息格式。所以对于任意的Web服务,序列化都是非常重要的步骤。

.NET3.0开始,WCF增加了基于显示选择模式(opt-in?)的DataContractSerializer。而XmlSerializer则是否决模式(opt-out)。前者表示我们需要指定需要序列化的内容,而后者则需要指定不需要序列化的内容。

DataContractSerializerXmlSerializer通常快约10%,但是对于对象如何被序列化几乎无法控制,所以如果需要干预对象的序列化,最好使用XmlSerializer

7.怎样在WCF中将MessageConractDataContract分部使用?

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读