-
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屬性來實現。如下:
1: [ServiceContract]
2: interface IMyCalculator3: {
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