自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WCF單例模式各種類型分析對(duì)比

開發(fā) 開發(fā)工具
WCF單例模式中總共可以被分為兩種類型,一種為隱式單例,而另外一種則為已知單例。那么今天我們將會(huì)通過這里介紹的內(nèi)容充分掌握這些內(nèi)容知識(shí)。

WCF開發(fā)工具中,有很多知識(shí)是需要我們?cè)趯W(xué)習(xí)的過程中去加強(qiáng)注意,提高認(rèn)知程度的。我們知道,WCF單例模式總共可以分為這樣兩種類型:已知單例(Well-Known Singleton)與隱式單例(Hidden Singleton)。#t#

一般地,在寄宿某個(gè)服務(wù)的時(shí)候,我們會(huì)指定服務(wù)的類型。WCF會(huì)根據(jù)服務(wù)類型,通過反射的機(jī)制,調(diào)用默認(rèn)無參構(gòu)造函數(shù)創(chuàng)建服務(wù)實(shí)例。但是,如果服務(wù)類型沒有定義無參構(gòu)造函數(shù),或者我們須要手工對(duì)服務(wù)實(shí)例作一些初始化工作,WCF提供的實(shí)例激活機(jī)制就不能為我們服務(wù)了。為了解決這種需求,須要自行創(chuàng)建服務(wù)實(shí)例,采用基于服務(wù)實(shí)例的寄宿方式來代替原來基于服務(wù)類型的寄宿方式。只有WCF單例模式實(shí)例上下文模式才能采用這種寄宿方式,我們把這種基于現(xiàn)有服務(wù)對(duì)象的服務(wù)實(shí)例提供模式稱為“已知單例(Well-Konown Singletone)模式”??梢岳肧erviceHost下面一個(gè)構(gòu)造函數(shù)重載來實(shí)現(xiàn)基于已知單例的服務(wù)寄宿。

  1. public class ServiceHost : ServiceHostBase{ 
    //其他成員 
  2. public ServiceHost(object singletonInstance, 
    params Uri[] baseAddresses); }   
  3. CalculatorService calculatorService = new CalculatorService();   
  4. using (ServiceHost host = new ServiceHost(calculatorService, 
    new Uri("http://127.0.0.1:9999/calculatorservice")))   
  5. {   
  6. host.Open();   
  7. Console.Read();   
  8. }  

通過上述方法設(shè)置已知的WCF單例模式服務(wù)對(duì)象,可以通過 ServiceHost的只讀屬性SingletonInstance獲得。而對(duì)于服務(wù)的ServiceHost的獲取,可以通過當(dāng)前OperationContext的只讀屬性Host得到。(通過OperationContext的Host只讀屬性獲得的是ServiceHostBase對(duì)象,如果沒有使用到自定義的ServiceHostBase,通過該屬性獲得的是ServiceHost對(duì)象)。下面的代理列出了相關(guān)的API和編程方式:

  1. public class ServiceHost : ServiceHostBase   
  2. {   
  3. //其他成員   
  4. public object SingletonInstance { get; }   
  5. }   
  6. public sealed class OperationContext : IExtensibleObject
    <OperationContext>   
  7. {   
  8. //其他成員   
  9. public static OperationContext Current { get; set; }   
  10. public ServiceHostBase Host { get; }   
  11. }   
  12. ServiceHost host = OperationContext.Current.Host as ServiceHost; 
  13. if (host != null)   
  14. {   
  15. CalculatorService singletonService = host.SingletonInstance 
    as CalculatorService;   
  16. }  

對(duì)于WCF單例模式實(shí)例上下文模式,如果采用傳統(tǒng)的基于服務(wù)類型的寄宿方式,即通過服務(wù)類型而非服務(wù)實(shí)例創(chuàng)建ServiceHost對(duì)象,服務(wù)實(shí)例是通過WCF內(nèi)部的服務(wù)實(shí)例激活機(jī)制創(chuàng)建的。不同于其他兩種實(shí)例上下文模式采用請(qǐng)求式實(shí)例激活方式(單調(diào)實(shí)例上下文在處理每次調(diào)用請(qǐng)求時(shí)創(chuàng)建,而會(huì)話實(shí)例上下文模式則在接收到某個(gè)客戶端的第一次調(diào)用請(qǐng)求時(shí)創(chuàng)建服務(wù)實(shí)例上下文),單例實(shí)例上下文在ServiceHost的初始化過程中被創(chuàng)建。我們把這種模式稱為隱式單例模式。

我們談到整個(gè)服務(wù)的寄宿過程大體分為兩個(gè)階段:ServiceHost的初始化和ServiceHost的開啟。第一個(gè)階段的主要目的在于通過對(duì)服務(wù)類型的反射,以及對(duì)配置的解析,創(chuàng)建用于表示當(dāng)前寄宿服務(wù)的ServiceDescription對(duì)象,而隱式單例服務(wù)對(duì)象就創(chuàng)建于這個(gè)階段。

當(dāng)基于單例服務(wù)的ServiceHost被成功創(chuàng)建并被初始化后,服務(wù)描述(通過類型System.ServiceModel.Description.ServiceDescription表述)被創(chuàng)建出來。閱讀了第7章的讀者應(yīng)該很清楚,ServiceDescription有一個(gè)Behaviors屬性維護(hù)著服務(wù)所有服務(wù)行為。通過自定義特性設(shè)置的ServiceBehaviorAttribute作為最常見的一種服務(wù)的行為自然也在其中。在服務(wù)寄宿過程中指定的已知服務(wù)實(shí)例,和WCF創(chuàng)建的隱式服務(wù)實(shí)例則分別保存在ServiceBehaviorAttribute的兩個(gè)私有變量之中。

 

  1. 1: public class ServiceDescription   
  2. 2: {   
  3. 3: //其他成員   
  4. 4: public KeyedByTypeCollection<IServiceBehavior> 
    Behaviors { get; }   
  5. 5: }   
  6. 1: [AttributeUsage(AttributeTargets.Class)]   
  7. 2: public sealed class ServiceBehaviorAttribute : Attribute, 
    IServiceBehavior   
  8. 3: {   
  9. 4: //其他成員   
  10. 5: private object hiddenSingleton;   
  11. 6: private object wellKnownSingleton;   
  12. 7: } 

以上就是我們?yōu)榇蠹医榻B的WCF單例模式相關(guān)內(nèi)容。

責(zé)任編輯:曹凱 來源: CSDN
相關(guān)推薦

2010-02-25 10:29:17

WCF Transac

2009-12-24 17:19:13

WPF觸發(fā)器

2010-02-04 11:32:01

數(shù)據(jù)交換技術(shù)

2021-04-20 08:32:56

蘋果AppStore違規(guī)

2010-01-14 12:50:26

光纖以太網(wǎng)交換機(jī)

2010-01-19 16:56:46

交換機(jī)光纖端口

2010-01-18 11:13:59

光纖交換機(jī)接口

2023-10-27 07:03:22

字符串String類型

2024-03-08 12:04:22

PythonPillow驗(yàn)證碼

2020-09-16 12:18:28

GoJava模式

2020-12-01 10:24:48

人工智能機(jī)器學(xué)習(xí)技術(shù)

2020-12-01 16:21:06

人工智能深度學(xué)習(xí)機(jī)器學(xué)習(xí)

2011-07-28 15:16:23

Oracle數(shù)據(jù)庫聯(lián)機(jī)日志spfile

2021-10-20 06:02:41

網(wǎng)絡(luò)釣魚漏洞安全工具

2021-03-02 08:50:31

設(shè)計(jì)單例模式

2021-02-01 10:01:58

設(shè)計(jì)模式 Java單例模式

2022-09-29 08:39:37

架構(gòu)

2010-02-24 17:47:05

WCF集合類型

2017-08-01 23:44:25

數(shù)據(jù)分析數(shù)據(jù)科學(xué)數(shù)據(jù)

2013-11-26 16:20:26

Android設(shè)計(jì)模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)