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

WCF實例上下文基本內容概述

開發 開發工具
WCF實例上下文主要就是對服務實例的封裝。它同時也是WCF管理服務實例生命周期的依托。在這里我們將會針對此做一個詳細介紹。

WCF開發工具是一款由微軟公司開發的功能強大的插件,它主要作用域通信方面,可以為開發人員帶來非常大的好處。在這里我們將會為大家詳細介紹一下有關WCF實例上下文的基本內容。#t#

WCF實例上下文是對服務實例的封裝,是WCF管理服務實例生命周期的依托。我們先撇開WCF,來簡單介紹一下在托管的環境中,公共語言運行時(CLR)是如何進行托管對象的生命周期的。在一個托管應用程序中,我們通過不同的方式創建一個托管對象(比如通過new關鍵字、反射或反序列化等)時,CLR會在托管堆為該對象開辟一塊內存空間。對象的本質就是存儲于某塊內存中數據的體現,對象的生命周期終止于相應內存被回收之時。對于CLR來說,負責對托管堆(在這里主要指GC堆)進行回收的組件是垃圾收集器(GC),GC掌握著托管對象的生殺大權,決定著托管對象的生命周期。

當GC在進行垃圾回收的時候,會將“無用”的對象標記為垃圾對象,然后再對垃圾對象進行清理。GC對“無用”對象的識別機制很簡單:判斷對象是否被“根(Root)”所引用。在這里,“根”是對一組當前正被使用,或者以后可能被使用的對象的統稱,大體包括這樣的對象:類型的靜態字段或當前的方法參數和局部變量、CPU寄存器等。

所以,孤立存在的對象將難逃被GC回收的厄運。反之,如果希望某個對象常駐內存中,我們***的方式就是通過某個“根”引用該對象。本章所講的實例管理,就是對服務實例生命周期的管理,即讓服務實例按照我們希望的方式創建、存活和消亡,所以我們***的方式也只能是:在希望服務實例存活的時候讓它被某個“根”引用,從而阻止GC將其回收;在希望服務實例被回收的時候連“根”去除,使GC能夠將其回收。而本節所講的WCF實例上下文(InstanceContext)就扮演著“根”的角色。

說到WCF實例上下文,相信讀者不會感到陌生,因為在進行WCF雙向(Duplex)通信的時候,我們通過實例上下文來封裝回調對象。在WCF中,實例上下文不僅僅用于對回調對象的封裝,也用于對真正服務實例的封裝。實際上可以將WCF的雙向通信理解成一種對等通信,通信的雙方是對等的參與者,并沒有嚴格的服務端和客戶端之分,或者說通信的雙方交替地扮演著服務與客戶的角色。客戶端正常調用服務端操作是一種服務調用;服務端回調客戶端操作也可以看成是一種服務調用。因此,通過實例上下文對回調對象和服務實例進行封裝本質上是一致的。

一個WCF服務通過一個ServiceHost進行寄宿,并添加一到多個終結點。對于接收到的服務調用請求,如果相應的WCF實例上下文存在,則通過它得到服務實例來處理服務請求,否則創建服務實例并通過實例上下文對其進行封裝,然后再通過實例上下文得到具體的服務實例進行服務請求處理。

實例上下文通過類型System.ServiceModel.InstanceContext表示。InstanceContext繼承自CommunicationObject,實現了IExtensibleObject<InstanceContext>接口。InstanceContext的定義如下面的代碼所示:

  1. 1: public sealed class InstanceContext : CommunicationObject, 
    IExtensibleObject
    <InstanceContext>   
  2. 2: {   
  3. 3: //其他成員   
  4. 4: public InstanceContext(object implementation);   
  5. 5: public InstanceContext(ServiceHostBase host);   
  6. 6: public InstanceContext(ServiceHostBase host, object implementation);   
  7. 7:   
  8. 8: public object GetServiceInstance();   
  9. 9: public object GetServiceInstance(Message message);   
  10. 10: public void ReleaseServiceInstance();   
  11. 11:   
  12. 12: public IExtensionCollection<InstanceContext> Extensions { get; }   
  13. 13: public ServiceHostBase Host { get; }   
  14. 14: public ICollection<IChannel> IncomingChannels { get; }   
  15. 15: public ICollection<IChannel> OutgoingChannels { get; }   
  16. 16: public SynchronizationContext SynchronizationContext { get; set; }   
  17. 17: } 

InstanceContext具有三個構造函數,接受ServiceHostBase對象和具體的實例對象作為其輸入參數。GetServiceInstance和ReleaseServiceInstance用戶服務實例的獲取和釋放。IncomingChannels和OutgoingChannels則表示入棧和出棧信道集合。而通過SynchronizationContext屬性則可以設置或獲取用于異步操作的同步上下文,比如服務操作須要在非UI線程下操作一個Windows Form的控件,你就需要基于UI線程的同步上下文(SynchronizationContext)。

以上就是我們為大家介紹的WCF實例上下文相關內容。

責任編輯:曹凱 來源: CSDN
相關推薦

2010-03-02 15:53:02

WCF服務合同

2010-03-02 17:55:37

WCF終結點地址

2010-02-25 15:49:05

WCF消息模式

2010-02-25 17:51:04

WCF服務地址

2010-01-28 15:33:37

Android程序架構

2010-02-06 13:58:13

C++ Bost庫

2010-02-02 15:12:09

C++ explici

2010-02-05 13:35:19

C++虛析構函數

2017-05-11 14:00:02

Flask請求上下文應用上下文

2012-12-31 10:01:34

SELinuxSELinux安全

2022-09-14 13:13:51

JavaScript上下文

2010-01-04 15:21:37

Silverlight

2017-10-25 06:50:27

數據科學數據數據分析

2010-03-05 11:53:20

Python命名約定

2022-09-15 08:01:14

繼承基礎設施基礎服務

2010-04-22 09:36:56

Oracle數據字典

2022-10-28 16:24:33

Context上下文鴻蒙

2024-09-30 14:10:00

2017-12-17 17:01:23

限界上下文系統模型

2025-03-18 08:14:05

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本黄色大片免费 | 国产精品伦理一区二区三区 | 国产精品久久久久婷婷二区次 | 中文字幕一级 | 亚洲精品久久久一区二区三区 | 日本在线免费看最新的电影 | 亚洲精品久久久久久一区二区 | 最新免费视频 | 日本五月婷婷 | 五月婷婷 六月丁香 | 欧美精品一区二区三区一线天视频 | 国产精品美女久久久久久久久久久 | 成人在线视频免费播放 | 在线三级电影 | 亚洲高清在线免费观看 | 东京久久 | 国产精品国产a | 一级免费看片 | 国产精品网址 | 999国产精品视频 | 日本欧美国产在线 | 99久久婷婷 | 国产美女视频 | 日本不卡一区二区三区在线观看 | 国产精品久久99 | 成人一区二区在线 | 中国一级特黄视频 | 国产成人在线播放 | 欧美日韩综合精品 | 国产污视频在线 | 精品少妇一区二区三区日产乱码 | 亚洲九九| 日韩免费网站 | 日韩在线视频一区 | 欧美日韩成人影院 | 国产一区二区电影 | 日韩中文字幕一区 | 精品一区二区三区四区 | 欧美日韩成人在线观看 | 欧美日韩国产精品一区 | 四虎永久在线精品免费一区二 |