[翻譯]15個最常見的WCF面試問題


  1. WCF和ASMX WebService的區別是什么?

最基本的區別在於,ASMX或者ASP.NET WebService是用來通過基於HTTP的SOAP來實現通訊。但WCF可以使用任意協議(HTTP,TCP/IP,MSMQ,NamedPipes等),消息封裝可以使用任意格式(默認SOAP)。

更多的細節比較,可以參考:WCF Vs ASMX

  1. 怎么理解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配置。可能的情況如下:

  1. 托管程序或者自我托管[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

 

作者:Imran Abdul Ghani

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM