新聞中心
在WCF服務(wù)中,我們可以對行為進行擴展,來滿足我們在程序開發(fā)中的各種需求。WCF以其靈活的可擴展架構(gòu)為開發(fā)者提供了方便,其中對WCF行為擴展或許是應(yīng)用中最為常見的。自定義對行為的擴展并不復(fù)雜,但仍有許多細節(jié)需要注意。#t#

目前成都創(chuàng)新互聯(lián)公司已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管維護、企業(yè)網(wǎng)站設(shè)計、赤峰林西網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
在服務(wù)端,一般是對DispatchRuntime和DispatchOperation進行擴展,擴展點包括了對參數(shù)和消息的檢查,以及操作調(diào)用程序, 它們對應(yīng)的接口分別為IParameterInspector,IDispatchMessageInspector以及 IOperationInvoker。而在客戶端,則是對ClientRuntime和ClientOperation進行擴展,擴展點包括對參數(shù)和消息 的檢查,對應(yīng)的接口分別為IParameterInspector和IClientMessageInspector。
這些接口類型均被定義在 System.ServiceModel.Dispatcher命名空間下,其中IParameterInspector接口可以同時作用在服務(wù)端和客戶端。對這些接口的實現(xiàn),有點類似于AOP的實現(xiàn),可以對方法調(diào)用前和調(diào)用后注入一些額外的邏輯,所以通常會將這些擴展稱為偵聽器。例如IParameterInspector接口,就定義了如下方法:
- void AfterCall(string operationName, object[] outputs,
object returnValue, object correlationState);- object BeforeCall(string operationName, object[] inputs);
WCF行為擴展在調(diào)用服務(wù)對象的目標方法前,會調(diào)用BeforeCall方法,而在調(diào)用后則會調(diào)用AfterCall方法。例如我們可在方法調(diào)用前檢驗計算方法的參數(shù)是否小于0,如果小于0則拋出異常:
- public class CalculatorParameterInspector:IParameterInspector
- {
- public void BeforeCall(string operationName, object[] inputs)
- {
- int x = inputs[0] as int;
- int y = inputs[1] as int;
- if (x <0 || y < 0)
- {
- throw new FaultException("The number can not be less than zero.");
- }
- return null;
- }
- public void AfterCall(string operationName, object[] outputs,
object returnValue, object correlationState)- {
- //empty;
- }
- }
WCF行為擴展對消息的檢查區(qū)分了服務(wù)端和客戶端,接口方法根據(jù)消息傳遞的順序剛好相反[注]。我們可以通過接口方法對消息進行處理,例如打印消息的Header:
- public class PrintMessageInterceptor : IDispatchMessageInspector
- {
- #region IDispatchMessageInspector Members
- public object AfterReceiveRequest(ref System.ServiceModel.Channels.
Message request, IClientChannel channel, InstanceContext instanceContext)- {
- MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
- request = buffer.CreateMessage();
- Console.WriteLine("After Receive Request:");
- foreach (MessageHeader header in request.Headers)
- {
- Console.WriteLine(header);
- }
- Console.WriteLine(new string('*', 20));
- return null;
- }
- public void BeforeSendReply(ref System.ServiceModel.Channels
.Message reply, object correlationState)- {
- MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue);
- reply = buffer.CreateMessage();
- Console.WriteLine("Before Send Request:");
- foreach (MessageHeader header in reply.Headers)
- {
- Console.WriteLine(header);
- }
- Console.WriteLine(new string('*', 20));
- }
- #endregion
- }
以上就是對WCF行為擴展的相關(guān)介紹。
當前名稱:WCF行為擴展為程序開發(fā)提供極大便利
文章路徑:http://www.dlmjj.cn/article/dhehsei.html


咨詢
建站咨詢
