您的位置:首页 > 其它

[翻译]15个最常见的WCF问题

2012-11-04 13:43 369 查看
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。



通过那些方式可以托管WCF Service?


要托管WCF Service,必须具备至少一个托管的进行,一个ServiceHost实例和一份正确Endpoint配置。可能的情况如下:

托管程序或者自我托管[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属性来实现。如下:

[ServiceContract]


interface IMyCalculator


{


[OperationContract(Name = "SumInt")]


int Sum(int arg1,int arg2);




[OperationContract(Name = "SumDouble")]


double Sum(double arg1,double arg2);


}


这些代码最终会转换成SumInt和SumDouble两个方法。


5. WCF 有哪些信息交换模式([b]Message Exchange Patterns )[/b]


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本身都包含了内置的安全处理。

<netTcpBinding>


<binding name="netTcpTransportBinding">


<security mode="Transport">


 <Transport clientCredentialType="Windows" />


</security>


</binding>


</netTcpBinding>


b.消息层安全

消息层安全通常是指消息的加密。

 <wsHttpBinding>


 <binding name="wsHttpMessageBinding">


 <security mode="Message">


 <Message clientCredentialType="UserName" />


 </security>


</binding>


 </wsHttpBinding>


这种安全性通常依赖于需求,但是我们可以使用一种复合的安全模式,如下:

<basicHttpBinding>


<binding name="basicHttp">


 <security mode="TransportWithMessageCredential">


<Transport />


 <Message clientCredentialType="UserName" />


 </security>


</binding>


</basicHttpBinding>


原文:http://www.codeproject.com/Articles/426776/WCF-Top-10-Interview-Questions

作者:Imran Abdul Ghani

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: