经典技术文章翻译(1):COM+集成:.NET Enterprise Services 如何帮你建立分布式应用(2)
再学习这些问题前,你必须知道CLR 的类和 and COM+ 上下文环境的关系。 首先,调用继承自ServicedComponent的类的实例都会被COM+ 上下文环境边界侦听。这些对象称为上下文环境边界。调用没继承自ServicedComponent的类的实例就不会被上下文环境边界侦听。 这些对象称为context-agile。CLR对象默认就是context-agile。 当你继承自ServicedComponent它们会变成context-bound 。(这个与 .NET remoting 上下文环境没有关系,我下面会讲到。) 图 9说明的这个架构
图 9 上下文环境对象
非常有趣的是CLR 对象可以实现类似COM 对象和COM+ 上下文环境交互这样的行为。通过 COM,调用对象通常默认都会被侦听; 所有的对象都是context-bound。COM 对象是context-agile 只有当它聚集了freethreaded marshaler (FTM)且不是第一个在COM+ 上下文环境里 被创建的对象(因为它不是可识别的对象), 这样情况下,调用不会被侦听。 新方法确保调用真的需要的时候被预处理和迟处理的好处是减少了侦听负荷。 特别地,如果组件服务类的实例返回了一个非组件服务类的实例 (例如一个 ADO.NET DataSet 对象),这个调用不会被侦听。 并且DataSet对象不需要做任何事情,它就是照常工作。
第二个你应该知道的事情是, 除了减少真正需要的交叉上下文侦听外, CLR/COM+集成尽可能地避免了托管类型和自有类型间的转换。 来自托管的CLR 代码到COM的调用是比较昂贵的。重要的部分就是类型的前后转换—大部分在CLR strings和COM BSTRs之间。 请求穿过COM+环境边界需要 调用一些固有的代码, 组件已经相当聪明可以避免同样来自CLR且处在同一进程里的调用者和被调用者之间的类型转换。 或许有一天所有的COM+ 运行时服务都会用CLR语言重新实现,调转就不成问题了。 那时不管如何,这个优化都会使得COM+ 侦听更加快速。
静态方法和属性
现在你知道了CLR代码如何关联上下文环境, 思考这个问题:如果一个基于CLR 组件服务类 包括静态方法和属性访问器, 它将在什么上下文里执行呢?答案是调用者。 这个看起来不是很直观, 但是它确实很有意义当你想静态成员不是对象定义且不许要在对象驻留的上下文里访问。例如,组件服务类在图 10有个静态方法,2, 和静态属性,4。这个代码会在调用者的上下文里执行。 调用实例的方法1, 或者属性3,通常在对象的上下文里执行。
这时你或许想知道当你在属性里保存了一个对象的静态引用且你想在另外一个上下问里引用会发生什么事情。基于COM的COM+编程里, 在被成为静态属性的全局变量里保存了一个原始的对象引用, 会导致严重的错误因为你不可以把对象不加包装地从原来的上下文里带走。使用基于CLR COM+ 代码, 这个就不是一个问题。 CLR 使用相当瘦的代理包装了每个组件服务类的实例子这样其它上下问的对象就不需要保留对象的直接引用。如果代码在一个保留基于CLR 组件服务类引用在静态属性的的上下文执行。它实际保留的是一个引用。如果另一个上下文里的代码要通过静态属性访问它, 特定的代理就发现变化而且封装它自己保留的引用这样侦听就触发了。这个是有个优美的解决方案,本质上你可以任何地方保存基于CLR服务类的实例并且都会正确触发。
|
||
相关文章:
Windows XP: Make Your Components More Robust with COM+ 1.5 Innovations House of COM: Migrating Native Code to the.NET CLR the "samples"technologies"component服务 subdirectory of the.NET Framework SDK 事务al COM+: Building 可伸缩的应用系统 by Tim Ewald (Addison-Wesley, 2001) |
||
作者Tim Ewald: DevelopMento的首席科学家, 最近出版的 事务性COM+: 创建可伸缩的应用系统 (Addison-Wesley, 2001)的作者
翻译Frank Xu Lei:程序员,技术博客http://www.cnblogs.com/frank_xl/。
|
经典技术文章翻译(1):COM+集成:.NET Enterprise Services 如何帮你建立分布式应用(2)相关推荐
- 谈技术文章翻译的信雅达-上
谈技术文章翻译的信雅达-上 Horin|贺勤 Email: horin153@msn.com Blog: http://blog.csdn.net/horin153/ ...
- 谈技术文章翻译的信雅达-下
谈技术文章翻译的信雅达-下 Horin|贺勤 Email: horin153@msn.com Blog: http://blog.csdn.net/horin153/ ...
- [经典文章翻译]A Crash Course on the Depths of Win32 Structured Exception Handling
转自:[已完工][经典文章翻译]A Crash Course on the Depths of Win32 Structured Exception Handling 原文题目: <<A ...
- AI在线文章翻译工具多翻译api接口对接集成工具
AI在线文章翻译具有多语言的翻译,互译和回译选项,只需要简单的操作就可以对我们的批量文章进行在线翻译处理,生成我们需要的文种,对于翻译质量的把控,AI在线文章翻译工具对接谷歌等大厂的翻译接口,也具有自 ...
- 写技术文章也挺好的,虽然没有多少人看
微信改版信息流以后,正式进入了"拼标题"时代,如果没有一个吸引眼球.摄人心魄,不点进来心里就痒痒的标题,那阅读量肯定是嗖嗖地下降. 偏偏我又不擅长此道,绞尽脑汁想了个自以为是10w ...
- 【合集】Jerry Wang 2018~2021 四年期间的 SAP 技术文章合集
这是 Jerry 2021 年的第 75 篇文章,也是汪子熙公众号总共第 352 篇原创文章. 大家好,我是 Jerry Wang,从 2007 年起在 SAP 成都研究院工作至今.我是一名全栈开发工 ...
- 2017上半年技术文章集合—184篇文章分类汇总
声明 | 作者 :于亚豪 | 原创 | 终端研发部 前言: 2017年已经过大半,公众号里技术文章整理和归类了一下,方便给大家查找和阅读.这也是目前 发文的一个统计. View篇: 高级UI特效之酷炫 ...
- A Crash Course on the Depths of Win32 Structured Exception Handling(文章翻译)
[经典文章翻译]A Crash Course on the Depths of Win32 Structured Exception Handling 原文题目: <<A Crash Co ...
- SAP成都研究院2018年总共87篇技术文章合集
2018年很快就要结束了.Jerry在2017年年底准备开始写这个公众号时,给自己定的目标是:2018年至少保证每周发布一篇高质量的文章.如今2018年就快过去了,高质量与否需要大家来反馈,至少从量上 ...
最新文章
- 通信系统未编码、卷积码与格雷码的仿真性能比较
- 【Qt】QtCreator中关于Style Plugin Example没有效果的修改方法
- redis命令_Redis 命令执行过程(下)
- mysql 怎么导入函数_mysql导入导出包括函数或者存储过程_MySQL
- [转] Deep Learning(深度学习)学习笔记整理系列
- 收集 48 个 JavaScript 代码片段,仅需 30 秒就可理解(值得收藏)
- WPAD原理介绍暨故障排查:ISA2006系列之三
- html 响应式布局 九宫格,两种方法实现响应式九宫格布局
- 95-190-540-源码-window-清除器(Evictors)-简介
- Java反射异常处理之InvocationTargetException
- html做一个年份月份天数选择器,jquery编写日期选择器
- 云计算 third day
- excel有多行不同内容需要向下填充
- 全国计算机等级考试二级Web程序设计考试大纲(2018年版)
- ERP能力计划与排产
- 开发者都能读懂的云原生指南 —— 新程序员003
- Doctype作用?标准模式与兼容模式各有什么区别?
- opengl 着色器
- resolution will not be reattempted until the update interval of XXX has elapsed or updates are force
- 什么样的自学Java网站才适合学习者?