WCF系列 基礎概念

WCF全稱Windows Communication Foundation,是微軟構建面向服務的分佈式編程框架。而它實際上是統一了COM和.Net Remoting等分佈式技術提供一個完整,通用,可靠的分佈式編程模型。編程

WCF做爲一個服務,它具備ABC這三個特性。服務器

A->Address  地址框架

地址包含服務位置和傳輸協議(傳輸樣式)這兩個元素。tcp

http://localhost:8001  基於http協議分佈式

net.tcp://localhost:8002/Service  基於tcp協議ide

net.Pipe://localhost/Pipe       基於進程間通訊編碼

net.msmq://localhost/Queue    基於消息隊列通訊spa

固然還有包括https和服務總線的協議模型。code

B->Binding   綁定orm

綁定定義了服務間通訊的基本方式。經常使用綁定以下:

  1. 基本綁定(BaseHttpBinding)
  2. TCP綁定(NetTcpBinding) 使用TCP協議實現了跨機器的通訊。
  3. IPC綁定(NetNamedPipeBinding) 使用命名管道在同一機器的進程間通訊。
  4. Web服務綁定(WSHttpBinding) 提供基於internet的通訊。
  5. MSMQ綁定(NetMsmqBinding) 使用微軟的消息隊列通訊

6.固然WCF還定義了其餘的一些不經常使用的綁定,我就不一一列舉了。具體能夠再編碼時注意綁定選項。

C->Contract  契約

契約是描述服務功能的標準方式。

服務契約(ServiceContract) 描述客戶端可用服務操做

數據契約(DataContract)   定義與服務交互的數據類型

錯誤契約(FaultContract)   定義服務拋出的錯誤操做

消息契約(MessageContract)  容許服務於消息交互

 

EndPoint  終結點

終結點的功能就是組裝ABC暴露給調用服務的客戶端,讓客戶端可以得到該服務的ABC這3個元素信息。

終結點的能夠經過配置文件也能夠經過編碼,經過配置文件配置WCF服務信息比較靈活,修改參數也無需從新編譯發佈。而經過編碼方式我的感受能控制的更加精準,而且可以充分理解WCF的配置體系。

Host 宿主

WCF服務必須託管的宿主進程中,自託管,IIS發佈,WAS宿主引擎。

Mex 元數據

WCF服務元數據是WCF服務的核心部分ABC的原始描述信息,暴露服務元數據的重要緣由就是解決了異構客戶端服務交互的關鍵問題。 元數據基於XML,自描述。客戶端能夠根據服務的元數據反序列換生成本地代碼。

一個簡單的Demo

以下爲一個自託管的基於tcp協議的WCF服務端和客戶端的基本實現,服務的發佈採用編碼模式

 private void StartAPPWCFService()
        {
           
            string serviceAddress = string.Format("net.tcp://{0}:{1}/", "localhost", CommonData.Configuration.Port);

            Dictionary<Type, Type> sevtypes = new Dictionary<Type, Type>();
           sevtypes.Add(typeof(IPersonService), typeof(PersonService));
           sevtypes.Add(typeof(ISafetyService), typeof(SafetyService));
            sevtypes.Add(typeof(IPressureService), typeof(PressureService));
           
            string endpointAddress = string.Empty;
            string tName = string.Empty;
            foreach (var item in sevtypes)
            {
                tName = item.Value.Name;
                endpointAddress = serviceAddress + tName;
                ServiceHost serviceHost = new ServiceHost(item.Value, new Uri(endpointAddress));
                //加載元數據結點
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                serviceHost.Description.Behaviors.Add(smb);
                serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
                //加載NetTcpBinding結點
                NetTcpBinding netTcpBinding = SetTCPBinding();
                serviceHost.AddServiceEndpoint(item.Key, netTcpBinding, endpointAddress);
                serviceHost.Open();
                listServiceHost.Add(serviceHost);
            }
        }
服務器端

客戶端中添加服務引用(net.tcp://127.0.0.1:18001/SafetyService/mex)後便可直接調用服務獲取數據,客戶端的調用配置信息由系統自動生成

SafetyService.SafetyServiceClient client = new SafetyService.SafetyServiceClient();
 Console.WriteLine(client.getData());
客戶端代碼

2015年強迫本身寫技術博,這是WCF系列第一期,後續會陸續更新。

相關文章
相關標籤/搜索