成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF單例服務(wù)中可擴展性認(rèn)識

開發(fā) 開發(fā)工具
WCF單例服務(wù)中的可擴展性的認(rèn)識,對于初學(xué)者來說是一個非常重要的知識。我們今天就為大家詳細(xì)介紹一下相關(guān)內(nèi)容。

WCF開發(fā)工具的出現(xiàn),為開發(fā)人員帶來了非常大的好處。我們今天將會通過這篇文章中介紹的內(nèi)容為大家充分講解一下關(guān)于WCF單例服務(wù)的基本內(nèi)容,從而使朋友們可以加深對WCF工具的應(yīng)用。#t#

對并發(fā)服務(wù)調(diào)用請求的處理是WCF最基本要求,為了提供服務(wù)的響應(yīng)能力,WCF會在不同的線程中處理并發(fā)請求。在單例模式下,服務(wù)實例是唯一的,也就是說相同的服務(wù)實例會同時被多個線程并發(fā)地訪問。在默認(rèn)的情況下,多個線程以同步的方式訪問WCF單例服務(wù)對象,也就是說,在某個時刻,最多只會有一個線程在使用服務(wù)實例。如果一個服務(wù)操作需要1秒,那么在一分鐘內(nèi)最多只能處理60個服務(wù)調(diào)用請求。倘若客戶端采用默認(rèn)的超時時限(1分鐘),對于60個并發(fā)地服務(wù)調(diào)用請求,至少會有一個服務(wù)調(diào)用會失敗。這極大地降低了WCF服務(wù)的可擴展性、響應(yīng)能力和可用性。

為了讓讀者對WCF單例服務(wù)的低可擴展性有一個深刻的認(rèn)識,我寫了一個極端的案例。從這個案例演示中,讀者會清晰地認(rèn)識到提供一個相同的功能,采用單調(diào)模式和單例模式,對客戶端影響的差別有多大。本案例同樣沿用計算服務(wù)的例子,Add方法中通過使線程休眠5秒模擬一個耗時的服務(wù)操作,下面是服務(wù)的定義,采用單調(diào)實例上下文模式。

  1. [ServiceBehavior(InstanceContextModeInstanceContextMode = 
    InstanceContextMode.PerCall)]   
  2. public class CalculatorService : ICalculator   
  3. {   
  4. public double Add(double x, double y)   
  5. {   
  6. Thread.Sleep(5000);   
  7. return x + y;   
  8. }   

在客戶端,通過ThreadPool模擬5個并發(fā)的客戶端,在Add操作調(diào)用成功后輸出當(dāng)前的時間,從而檢驗服務(wù)的響應(yīng)能力。

  1. for (int i = 0; i <   
  2. i++)   
  3. {   
  4. ThreadPool.QueueUserWorkItem(delegate   
  5. {   
  6. using (ChannelFactory<ICalculator> channelFactory = 
    new ChannelFactory<ICalculator>("calculatorservice"))   
  7. {   
  8. ICalculator calculator = channelFactory.CreateChannel();   
  9. Console.WriteLine("{3}: x + y = {2} when x = {0} and y = {1}", 
    1, 2, calculator.Add(1, 2), DateTime.Now); }   
  10. });   

從客戶端輸出結(jié)果我們可以看出,對于5個并發(fā)的服務(wù)調(diào)用均得到了及時的相應(yīng),這是我們希望看到的結(jié)果。

  1. 3/8/2009 08:03:17 : x + y = 3 when x = 1 and y = 2 
  2. 3/8/2009 08:03:17 : x + y = 3 when x = 1 and y = 2 
  3. 3/8/2009 08:03:17 : x + y = 3 when x = 1 and y = 2 
  4. 3/8/2009 08:03:18 : x + y = 3 when x = 1 and y = 2 
  5. 3/8/2009 08:03:18 : x + y = 3 when x = 1 and y = 2 

但是,如果將實例上下文模式換成是InstanceContextMode.Single,情況就完全不一樣了。從最終的輸出結(jié)果可以看出,客戶端得到執(zhí)行結(jié)果的間隔為5s,由此可知服務(wù)操作在服務(wù)端是以同步的方式執(zhí)行的。

  1. [ServiceBehavior(InstanceContextModeInstanceContextMode = 
    InstanceContextMode.Single)]   
  2. public class CalculatorService : ICalculator, IDisposable   
  3. {   
  4. //省略實現(xiàn)   

輸出結(jié)果:

 

  1. 3/8/2009 08:03:25 : x + y = 3 when x = 1 and y = 2 
  2. 3/8/2009 08:03:30 : x + y = 3 when x = 1 and y = 2 
  3. 3/8/2009 08:03:35 : x + y = 3 when x = 1 and y = 2 
  4. 3/8/2009 08:03:40 : x + y = 3 when x = 1 and y = 2 
  5. 3/8/2009 08:03:45 : x + y = 3 when x = 1 and y = 2 

 

WCF通過并發(fā)模式(Concurrency Mode)表示多線程訪問WCF單例服務(wù)對象的方式,而并發(fā)模式作為一種服務(wù)行為可以通過ServiceBehaviorAttribute特性進行設(shè)定。WCF通過ConcurrencyMode枚舉來表示不同形式的并發(fā)模式,三個枚舉值Single、Reentrant和Multiple分別表示單線程、重入和多線程三種并發(fā)模式。關(guān)于并發(fā)和并發(fā)模式,將在本書的下一卷予以詳細(xì)講解,在這里就不再作重復(fù)介紹了。ConcurrencyMode在ServiceBehaviorAttribute的定義如下:

  1. [AttributeUsage(AttributeTargets.Class)]   
  2. public sealed class ServiceBehaviorAttribute : 
    Attribute, IServiceBehavior   
  3. {   
  4. //其他成員   
  5. public ConcurrencyMode ConcurrencyMode { get; set; }   
  6. }   
  7. public enum ConcurrencyMode   
  8. {   
  9. Single,   
  10. Reentrant,   
  11. Multiple   
  12. }  

ConcurrencyMode.Single是默認(rèn)采用的并發(fā)模式,這正是上面的例子中服務(wù)操作同步執(zhí)行的根本原因。為了讓服務(wù)操作異步地執(zhí)行,從未提供服務(wù)的響應(yīng)能力,我們只須要通過ServiceBehaviorAttribute將并發(fā)模式設(shè)為ConcurrencyMode.Multiple就可以了。

  1. [ServiceBehavior(InstanceContextModeInstanceContextMode = 
    InstanceContextMode.Single, 
    ConcurrencyModeConcurrencyMode =
     ConcurrencyMode.Multiple)]   
  2. public class CalculatorService : ICalculator, IDisposable   
  3. {   
  4. //省略實現(xiàn)   

輸出結(jié)果:

  1. 3/8/2009 08:05:05 : x + y = 3 when x = 1 and y = 2 
  2. 3/8/2009 08:05:05 : x + y = 3 when x = 1 and y = 2 
  3. 3/8/2009 08:05:05 : x + y = 3 when x = 1 and y = 2 
  4. 3/8/2009 08:05:05 : x + y = 3 when x = 1 and y = 2 
  5. 3/8/2009 08:05:06 : x + y = 3 when x = 1 and y = 2 

如果將并發(fā)模式設(shè)為ConcurrencyMode.Multiple,意味著同一個服務(wù)實例在多個線程中被并發(fā)執(zhí)行。當(dāng)我們操作一些數(shù)據(jù)的時候,須要根據(jù)具體的情況考慮是否要采用一些加鎖機制來確保狀態(tài)的同步性。

WCF單例服務(wù)的基本概念就為大家介紹到這里。

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

2024-10-10 14:01:34

2021-05-17 07:28:23

Spring可擴展性項目

2021-09-02 09:42:11

測試軟件可擴展性開發(fā)

2017-01-05 19:29:10

公共云云存儲微軟

2012-06-04 11:04:46

虛擬化

2022-09-05 15:17:34

區(qū)塊鏈比特幣可擴展性

2021-12-03 14:41:00

云存儲可擴展性存儲

2016-10-13 14:38:51

OpenStack可擴展性IT人員

2021-12-09 05:36:16

云存儲可擴展性數(shù)據(jù)存儲云存儲

2009-04-16 17:53:09

SQL Server 應(yīng)用程序擴展性

2023-05-17 15:53:21

2009-04-20 11:33:47

光網(wǎng)絡(luò)動態(tài)擴展

2011-08-03 09:22:25

MySQL可擴展性

2023-10-11 13:46:26

緩存Web應(yīng)用程序

2023-11-07 09:54:27

架構(gòu)演進

2020-08-18 08:04:16

DubboSPI框架

2022-05-13 16:05:03

區(qū)塊鏈比特幣可擴展性

2023-06-15 15:40:36

2010-03-18 11:01:34

VMware

2010-06-30 17:15:39

向外擴展SQL Ser
點贊
收藏

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

主站蜘蛛池模板: 国产成人网 | 久热久热| 国产午夜精品一区二区三区四区 | 午夜影晥 | 一级做a爰片久久毛片免费看 | 亚洲精品视频一区 | 欧美视频三区 | 99久久精品一区二区成人 | 国产色在线 | 一级网站 | www.国产精| 精品久久久久香蕉网 | 天天综合永久入口 | 在线观看免费av网站 | 亚洲国产精品一区二区第一页 | 日韩电影一区 | 精品亚洲一区二区 | 久久1区| 欧美日韩综合 | 毛片综合 | 亚洲精品99| 久久9热| 青青久在线视频 | 成人欧美一区二区三区在线观看 | 成人性视频免费网站 | 中文字幕高清视频 | 久久久久久久一区二区三区 | 一区天堂| 亚洲日本欧美日韩高观看 | 亚洲精品二区 | 免费亚洲视频 | 色吧色综合 | 国产欧美精品区一区二区三区 | 国产一二三区在线 | 日韩欧美亚洲 | www.久久99| 国产精品免费高清 | 91av在线视频观看 | av手机在线 | a在线视频 | 国产精品69毛片高清亚洲 |