新事务之一: dotNET和COM+中的事务(1)

华为OD机试 - 计算数列位置N的值 - 模拟法(Python/JS/C/C++ 新系统 100分) 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。输入 M,N 两个数,则按照以下规则形成一个数列。数列的前 M 个元素的值为 1 到 M从 M+1 个元素开始,计算逻辑为如果其前 M 个元素中,存在值相同的元素,则该位置上的数值等于前 M 个数中最大数值与最小数值之和。如果其前 M 个元素中, 阅读详情

新事务之一: dotNET和COM+中的事务  


小气的神

2002-4-16

 

Article Type: In-Depth 

难度等级:6/9       

版本:2.32

 

 

COM+早于dotNET出现,并且在这几年成为我们在Windows平台下进行分布式和企业级开发的一个解决方案和操作平台,它预置了一些面向企业级应用的通用和底层设施,特别是多层应用模型的中间层的基础设施模块,借助它可以使得开发人员有更多的精力放在应用的业务逻辑本身,有趣的是有时它并不真的让我们满意,值得一提的是从它的父辈开始,都一直是操作系统的一部分。dotNET则是Microsoft最近发表的下一代的一个面向Web的开发平台,比起它所有的前任都显得野心勃勃和气势庞大,所以说足够疯狂和让人振奋。对于dotNET来说COM+是一个成熟而意义重大的历史伙伴,而对于COM+来说dotNET是一个新鲜而略带侵略性的新贵朋友,无论两者如何,对于相对局外的开发人员来说,如何和它们相处和交互将成为一个不小的瓶颈,有些糟糕的是dotNET和COM+在我们之外,而且在不断发展和变化。所以一定有一些有趣的事情,而我们把范围缩小,聚焦在我们开发过程中可能密切相关的事务编程上,可以说,变化带来了许多新的变化而且也带来了许多开发人员的新的思考,在后面的文章中你们会陆续看到他们的思考给我带来的启发和益处,那么希望同样也能给更多的人带来启发和思考。

 

消除一些模糊的概念

一段时间以来我们对dotNET、CLR、COM、COM+存在一些模糊不清的概念,dotNET是Microsoft定义的下一代的开发平台。CLR(Common Language Runtime)是dotNET的核心和心脏,也是Microsoft对ECMA规范的一个Windows平台的实现。COM(Component Object Model)是一个组件对象模型,提供了组件之间交互和作用的基本机制和原则,它是一项组件开发技术和编程模型。COM+是一个组件运行环境,是提供了一系列有关分布式系统功能的Services集合的组件运行环境和工具包。CLR替代了COM,但是无法也没有替代COM+,COM+现在叫.NET Enterprise Services,当然如果不带.NET的前缀,Enterprise Services最能体现COM+的作用和定义。CLR离应用层近一些,而COM+离操作系统更近一些,对于最近的Windows.NET的操作系统对COM+进行的一系列增强:Application Partitioning、Application Pooling and Recycling、Resource Manager、Configurable Transaction Isolation Level、Web Services等等(详见Juval Lowy的文章)来说,有些低级的程序API,CLR还根本无法有相应的功能提供,还需要wrapping 这些新的COM+ APIs。当然不能肯定未来的未来,这些COM+的API是用C#或其它的CLR-managed API直接实现。目前可以说,如果以前你用COM技术在COM+环境下工作的很好(或者很痛苦),那么现在用CLR在COM+下工作起来一样也很好,并且要方便,快捷;dotNET使得开发人员使用COM+更加方便和有效率,这就如同许多年以前从字符键盘界面(COM)引入图形鼠标界面(dotNET)是对计算机的使用(COM+)的一场革命一样。

 

dotNET中使用COM+的事务服务

dotNET环境下使用COM+以及事务服务要经过下面一些步骤:

1. 实现一个COM+的Configured类

我们只用从System.EnterpriseServices.ServicedComponent继承一个自己的类,然后提供一个缺省的构造函数

2. 声明分布式事务

只用这类名前面加事务属性即可比如:[Transaction(TransactionOption.Required) ]

3. 提交事务

IObjectControl::SetComplete或是直接使用自动完成属性 [AutoComplete()]

4. 其它的IObjectConstruct、IObjectControl、Pooling、JustInTimeActivation

A)        IObjectConstruct :类名前加[ConstructionEnabled(Default="Connection String")]属性,然后覆盖方法 public override void Construct(string constructString){}

B)        Pooling:类名前加属性[ ObjectPooling(true, 3,30) ],然后覆盖CanBePooled方法,public override bool CanBePooled() { return true; }

C)       JustInTimeActivation :加属性[ JustInTimeActivation(true) ]

 

5. 编译和分发

a)        组件注册

[assembly: ApplicationName("MydotNetCOMApp")]

[assembly: ApplicationActivation(ActivationOption.Library)]

b)        组件强名

[assembly: AssemblyKeyFile("keyfile.snk")]

这一步如果先产生sn.exe 产生.snk文件然后在VS.NET IDE中打开AssemblyInfo.cs,加入上面的一行似乎更方便这样就不用手工的csc编译了,VS.NET可以编译强名的Assembly。尝试使用AssemblyInfo.cs会更规范和统一。

c)         编译组件

sn -k keyfile.snk

csc /out: dbClass.dll /t:library /r:System.EnterpriseServices.dll dbClass.cs

d)        发布登记 

Regsvcs dbClass.dll (Regsvcs自动调用regasm.exe和tlbexp.exe)

 

一个大致的文件可能向下面这样,先原谅我展示了太多的属性:)

using System;

using System.EnterpriseServices; // Namespace necessary for creating COM+ application

using System.Reflection;

using System.Runtime.CompilerServices;

using System.Runtime.InteropServices;

 

[assembly: ApplicationName("COMPlusSamplesLib")]

[assembly: ApplicationActivation(ActivationOption.Library)]

 

//[assembly: AssemblyKeyFile("..//..//keyfile.snk")]

 

namespace dotCNetwork.dbClass

{

    /// <summary>

    /// Summary description for Class1.

    /// </summary>

    [ConstructionEnabled(Default="server=localhost;uid=sa;pwd=;initial catalog=pubs")]

    //[ EventTrackingEnabled ]

    [ObjectPooling(MinPoolSize=2,MaxPoolSize=50)]

    [ Transaction(TransactionOption.Required) ]

    [ Synchronization(SynchronizationOption.Required) ]

    [ JustInTimeActivation(true) ]

    [Guid("569A14C1-5DAD-4c8f-BB48-89DDD89FAD7A")]

    public class Author : ServicedComponent

    {

        private const string CONNSTRING="server=localhost;uid=sa;pwd=;initial catalog=pub";

       

        private string ConnString ;

 

        public Author()

        {

            //

            // TODO: Add constructor logic here

            //

        }

 

        //JIT/Pooling

        protected override void Activate()

        {}

        // JIT/Pooling

        protected override void  Deactivate()

        {}

       

        //JIT/Pooling

        protected override bool CanBePooled()

        { return true ; }

       

        //Construct String

        protected override void Construct(  string s )

        {

            if( s.Length== 0  || s == null)

            {

                ConnString = CONNSTRING;

            }

            ConnString = s ;

        }

 

        //my Function

        public bool alive()

        {

            try

            {

                // Commit the transaction

                ContextUtil.SetComplete();

                return true ;

            }

            catch(Exception e)

            {

                ContextUtil.SetAbort();

                return false ;

            }

        }

 

        [AutoComplete]

        public string GetConnectionStr()

        {

            return ConnString;

        }

         

    }

}

 

关于如何生成一个dotNET的组件并且注册到COM+环境中以及客户端如何调用的具体步骤和实例我就跳过了,请参照Microsoft的标准规范和建议。

 

 

(未完) 


特别:

本文优快云署名首发,转载或改编请注明作者和出处。如果有问题,请发电子邮件给new2001@msn.com

以上文字和图片涉及其他人的隐私和个人权利,所有文字和图片只用于内部交流,不作任何新闻发表和商业用途。

Android 13 SPRD 源码默认打开多用户实际无效果问题修复 【代码】Android 13 SPRD 源码默认打开多用户实际无效果问题修复。 阅读详情

相关推荐

单片机技术入门与实战:从零基础到项目开发

单片机(MCU)作为嵌入式系统的核心组件,集成了CPU、内存和各种接口电路,广泛应用于智能家居、工业控制和汽车电子等领域。其工作原理基于实时控制和低功耗设计,通过定时器、中断系统和通信接口等功能模块实现各种控制任务。在物联网和智能硬件快速发展的背景下,掌握单片机开发技术成为电子工程师的重要技能。本文以STM32和PIC系列为例,详细解析单片机的基本概念、功能模块和选型指南,并分享从入门到项目实战的系统学习方法,帮助开发者在3-6个月内快速掌握这一关键技术。

weixin_35753291的博客 652

转贴:COM组件对象与.NET类对象的相互转换

* 本文选自:COM集中营 COM组件对象与.NET类对象的相互转换 lostall 运行环境:Visual Studio.NET Beta2, VC7, C# 参考资料:MSDN 级别:入门级 一、前言 COM组件对象与.NET类对象是完全不同的,但为了使COM客户程序象调用COM组件一样调用.NET对象,使.NET程序象使用.NET对象一样使用CO...

weixin_33836874的博客 365

ESP-IDF 5.4下esp32-camera组件编译报错?手把手教你解决头文件缺失问题

本文详细解析了ESP-IDF 5.4环境下esp32-camera组件编译时出现的头文件缺失问题,提供了从目录结构优化、CMake配置到VSCode智能感知设置的完整解决方案。针对第三方组件集成难题,文章特别强调了PRIV_REQUIRES依赖声明和路径配置的关键作用,帮助开发者高效解决编译错误并建立稳定的开发环境。

weixin_28829629的博客 309

dotNET和COM+中的事务1

http://china.udotnet.com/cnudotnet_num_416.aspx新事务之一: dotNET和COM+中的事务(1) 新事务之一: dotNET和COM+中的事务  --------------------------------------------------------------------------------小气的神2002-4-16 Article T

wang2855的专栏 1172

JaCoCo报告聚合的5个常见坑点排查指南:从单模块到多模块的完整避坑手册

本文详细解析了JaCoCo在多模块Maven项目中生成聚合报告时的5个常见问题,包括多模块报告聚合失效、覆盖率数据不一致、增量构建导致的覆盖率丢失等,并提供了具体的配置示例和解决方案。帮助开发者高效排查和解决JaCoCo报告聚合中的各种疑难杂症,提升代码覆盖率分析的准确性和效率。

weixin_27918373的博客 250

AI编程工具选哪个更高效?开发者深度评测

无论是代码生成、错误修复,还是架构设计,AI都能提供强大的辅助能力。然而,市面上AI编程工具众多,如何选择最适合自己的?本文将从代码质量、响应速度、多语言支持、集成能力等多个维度,为你解析2025年最主流的几款AI编程工具,帮助你做出更高效的选择。根据2025年最新调研数据,全球超过85%的开发者正在使用AI编程工具辅助开发,相比2023年增长了近40%。合理利用AI,能让你的开发效率提升数倍,但真正的核心竞争力,仍然在于你的编程思维和解决问题的能力。:技术较强的开发者、重视数据隐私的企业。

1854

dotNET和COM+中的事务3

新事务之一: dotNET和COM+中的事务(3) 新事务之一: dotNET和COM+中的事务    小气的神2002-4-16  Article Type: In-Depth  难度等级:6/9        版本:2.32   Isolation level  Read uncommitted这是最小的隔离等级,它不提供任何事务隔离的保证,这种隔离等级容易导致脏读。大型的应用中发生多个并发事

wang2855的专栏 1373

Vivado FFT IP核配置与实战:FPGA信号处理硬件加速指南

快速傅里叶变换(FFT)是数字信号处理(DSP)中的核心算法,用于将时域信号转换到频域进行分析。其原理基于离散傅里叶变换(DFT),通过蝶形运算的分解与复用,大幅降低了计算复杂度。在工程实践中,软件实现的FFT难以满足高速实时处理的需求,因此硬件加速方案至关重要。FPGA凭借其并行架构和可定制性,成为实现高性能FFT的理想平台。通过集成专用的FFT IP核,如Vivado中的Pipelined Streaming I/O架构,可以构建流水线化的计算引擎,实现极低延迟和高吞吐量的连续数据流处理。这种硬件方案特

weixin_42536863的博客 646

新事务之一: dotNET和COM+中的事务(3)

新事务之一: dotNET和COM+中的事务  小气的神2002-4-16 Article Type: In-Depth  难度等级:6/9        版本:2.32  Isolation level Read uncommitted这是最小的隔离等级,它不提供任何事务隔离的保证,这种隔离等级容易导

ccBoy的专栏 2740

pyecharts在jupyter notebook中不能够渲染图表问题。

在使用jupyter notebook中使用pyecharts绘制可视化图表的时候,发现图表不能渲染到页面中,生成的html是没问题的,本文主要解决在jupyter notebook中不能渲染这个问题。

猿小白的博客 1166

2024年游戏策划最新面试题及答案

1. **游戏策划**:负责游戏设计和开发的创意和技术过程。2. **主要职责**:设计游戏玩法、故事、角色、世界等。4. **游戏机制**:定义玩家如何与游戏世界互动的规则。13. **引人入胜的角色**:深入的背景故事、个性特征。3. **游戏平衡**:确保游戏公平、有趣且具有挑战性。7. **RPG特点**:角色发展、故事驱动、玩家选择。12. **关卡设计技巧**:挑战性、流动性、视觉引导。11. **游戏关卡设计**:创建游戏世界的不同阶段。5. **游戏循环**:玩家在游戏中重复的行为模式。

guo162308的博客 2320

新事务之一: dotNET和COM+中的事务(2)

新事务之一: dotNET和COM+中的事务 小气的神2002-4-16 Article Type: In-Depth  难度等级:6/9        版本:2.32CLR中和事务相关的属性类属性类作用AutoCompleteAttribute函数内自动完成声明的事务Constructio

ccBoy的专栏 1940

【06】新国都——新国都 嵌入式笔试,校招,题目记录及解析

本文总结了新国都嵌入式校招笔试题目及解析,内容涵盖C语言基础、Linux系统、数据结构与算法等多个方面。主要包括:1)不定项选择题10道,涉及字符串常量、蓝牙与GPRS区别、编译错误识别等;2)判断题10道,考察Linux权限、循环控制、内存管理等;3)填空题5道,包括编码计算、逻辑运算、宏定义等;4)简答题2道,解析全局变量引用和进程线程区别。题目难度适中,重点考察嵌入式开发基础知识和编程能力,并提供详细解析和扩展知识链接,对准备嵌入式相关笔试具有参考价值。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1431

dotnet 也能协调分布式事务啦

2022 年 5 月 24 日,我们发布了 DBPack版本,该版本主要 release 了分布式事务功能。在我们的规划里,DBPack 是要支持所有微服务开发语言协调分布式事务的,但经过社区反馈,dotnet core 并不支持。于是,我们在 v0.1.1 对 dotnet core 进行了支持。下面就如何支持 dotnet core 做一个说明。...

dugukuangshao的专栏 194

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

dotnet 下开发 COM+ 组件

转载:一、问题的提出    1、最终用户的每次请求,都将读取Mapping文件——可以通过缓存解决;    2、xxx子系统需要不断的写入Mapping文件——也可以先写入内存然后批量写入文件解决;    二、分析解决问题    由于分别有2个或更多子系统需要对同一文件进行读写操作,而客户端又有很大的并发性,所以极可能出现读写冲突或错误,也必将影响系统的性能。    通过调

Jeelo的专栏 1390

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Dotnet 使用数据库事务的方法

        数据库的操作比较复杂,特别是插入等操作难免有错误,为了保证数据的完整性,在数据库操作中常常需要使用事务。通过事物来完成一组操作,一旦其中出现任何错误,可以回滚这一组操作,这样数据就不会因为操作中的某个失误而变得不完整。        以SQL SERVERADO.NET为例,数据库中操作数据库比较多的是使用两种方法,一个是通过SqlCommand对象,另一种是SqlDataAd

stonec的专栏 669

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

dotnet core 也能协调分布式事务啦!

先请允许我对 MySql 的通信协议做一个简单的介绍。MySql 支持两种协议,一种是文本(Text)协议,一种是二进制(Binary)协议。MySql 客户端使用 COM_QUERY 发出的请求,MySql 服务端会以文本协议响应结果;使用 COM_STMT_EXECUTE 命令发出的请求,会以二进制协议响应结果。在我们用程序调用 MySql Client SDK 发起请求的时候,不同的 MySql Client SDK 会默认使用不同的协议发送请求,但大部分 MySql Client SDK 都支持文本

m0_56069948的博客 289

DotNet 2.0 事务模型

DotNet 2.0 事务模型 在微软DotNet2.0中引进新的命名空间System.Transactions,具有本地简单的事务模型。它解决1.1事务缺点。 在DotNet中有两种类型的事务,分别适合于不同情况。第一种是ADO.NET 提供的。第二种是企业事务服务。我们先看一看1.1版本的事务类型: ADO.NET事务模型 作为DotNet数据提供程序的一部分的事务处理模型,使用...

weixin_30877493的博客 104

.net中的4种事务总结

在一个MIS系统中,没有用事务那就绝对是有问题的,要么就只有一种情况:你的系统实在是太小了,业务业务逻辑有只要一步执行就可以完成了。因此掌握事务处理的方法是很重要,进我的归类在.net中大致有以下4种事务处理的方法。大家可以参考一下,根据实际选择适当的事务处理。 1 SQL事务 sql事务是使用SQL server自身的事务:在存储过程中直接使用Begin Tran,Rollback ...

weixin_30819163的博客 282

PowerShell 二进制模块实战:用 .NET Standard 2.0 和 dotnet CLI 构建跨平台 Cmdlet

本文基于 PowerShell 仓库中的 `docs/cmdlet-example/command-line-simple-example.md` 指南,完整演示如何使用 .NET Core 命令行工具(`dotnet` CLI)从零创建一个基于 .NET Standard 2.0 类库的 PowerShell 二进制模块(Binary Module)。读完本文,你将掌握:如何用 `dotnet

gitblog_00653的博客 253

MSMQ,Enterprise Service, DotNet Remoting,Web Service 的优缺点

对于送耦合的引用,有一下四种选项。1.MSMQ从windows nt 开始微软就开始提供msmq 的支持,一直到现在的3.0,主要提供一下几个特性的支持。 可靠的消息传递,类似mail 系统,有脱机支持可设置消息的优先级,Label的各种额外的标示事务支持通过DC,IC的灵活应用,有好的缩放性对于客户端,要求必须是windows 系统,从windowsce 到windows .net 2003 都

Montaque & DotNet 2682

.NET的事务控制

<br /><br />在分布式应用程序中,不可避免地会经常使用到事务控制。事务有一个开头和一个结尾,它们指定了事务的边界,事务在其边界之内可以跨越进程和计算机。事务边界内的所有资源都参与同一个事务。要维护事务边界内资源间的一致性,事务必须具备 ACID 属性,即原子性、一致性、隔离性和持续性。 <br /> <br />本地事务和分布式事务 <br />-------------------- <br />本地事务是其范围为单个可识别事务的数据资源的事务(例如,Microsoft SQL Server 数

w87875251l的专栏 701

dotnet-sql-cache 工具实战指南:为 ASP.NET Core SQL Server 分布式缓存创建表与索引

`dotnet-sql-cache` 是 ASP.NET Core 仓库中随 [Microsoft.Extensions.Caching.SqlServer](https://link.gitcode.com/i/3b0acadd9b85c33b6dbfeea392f216e4)(SQL Server 分布式缓存实现)配套提供的命令行工具,其唯一职责是在 Microsoft SQL Server

gitblog_00862的博客 885

ApplicationInsights-dotnet 接入 ASP.NET Core 完整教程:自动追踪 HTTP 请求、SQL 与依赖

**ApplicationInsights-dotnet** 是微软官方出品的 .NET 应用性能监控 SDK,专为 **ASP.NET Core** 等应用提供服务端监控能力。接入后无需手动埋点,即可**自动追踪 HTTP 请求、SQL 查询和外部依赖调用**,把请求耗时、状态码、异常堆栈、日志和性能指标自动上报到 Azure Monitor / Application Insights。本教程

gitblog_00415的博客 478
上一篇: 《专栏声音》转向面向对象的12个步骤
下一篇: 新事务之一: dotNET和COM+中的事务(3)
ccBoy
博客等级 码龄26年 6粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值