zoukankan      html  css  js  c++  java
  • 在vs 2005 C#中如何使用COM+(原创)

    关于在vs 2005 C#中如何使用COM+,这是前几天作项目遇到的,一开始真是一头雾水,上网查了好多资料也是好多说法,经过一翻努力终于搞定,呵呵,现在把使用过程记录下来,希望能与大家一起分享!

    COM+需要服务器端(部署服务或组件)和客户端(使用服务),我觉得COM+更合适于B/S系统中,当然在我做的银行管理系统中C/SB/S都有了!下面就开始吧…..

    (一)   在解决方案中:[文件]->[添加]->[新建项目]->[类库]  (我是使用一个类库改造成Com+),把它命名为Bank,它包含两个文件{Bank.cs(Class1.cs重命名成Bank.cs得到的)AssemblyInfo.cs}

    (二)   Bank类库中添加引用,[右击]->[添加引用]->.NET组件中->System.EnterpriseServices

    (三)   回到Bank.cs中在代码上添加using System.EnterpriseServices; 然后定义银行操作的接口,BankOperation

             //BankOperation 接口的定义

          public interface BankOperation

     {

             .

             //利用卡号取款

            bool WithdrawByCardNo(string CardNo, decimal amount);

     }

    (四)   改造Bank.cs中的Bank,让它继承BankOperation接口和ServicedComponent, 它会自动有个提示,按Tab,便会生成接口中抽象类的实现

             public class Bank : ServicedComponent, BankOperation

    {

         

          bool WithdrawByCardNo(string CardNo, decimal amount)

          {

              Throw(异常);

              //此处就是操作的具体实现了,当然要自己写代码

             }

    }

    (五)   可以Bank.cs中也可以在AssemblyInfo.cs中添加设置一些使用时的配置(如设置服务器启动模式,组件安全性,认证方式,代理等等..相关的资料上网找找吧…)代码如下

    命名空间外:

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Data.SqlClient;

    using System.Collections;

    using System.EnterpriseServices;

    //配置Bank组件的安全性,并且说明组件的激活方式是服务器激活

    [assembly: ApplicationAccessControl(

            AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent,//进程安全级别,组件级别

            Authentication = AuthenticationOption.Call,//认证为调用每个方法时都要认证

            ImpersonationLevel = ImpersonationLevelOption.Delegate)]//安全性的扮演角色是代理

    //激活方式:服务器激活

    [assembly: ApplicationActivation(ActivationOption.Server)]

     

    namespace Bank

    {

    }

    命名空间中:

         //设置支持事务

        [Transaction(TransactionOption.Supported)]

        //使用对象池,最小共享量是10,最大共享容量是50,创建时限是30,单位从毫秒记

        [ObjectPooling(true, 10, 50, CreationTimeout = 30000)]

        //使用用时激活(JITA)

        [JustInTimeActivation(true)]

        //定义构造字符串

        [ConstructionEnabled(Default = "server=.;database=Bank;uid=sa;pwd=sa;")]

        //定义安全角色

    [SecurityRole("bank", true)]

    [ComponentAccessControl]

     

    关于构造字符串的使用:

         在类Bank重置Construct()方法

             string connString;

            protected override void Construct(string s)

            {

                base.Construct(s);

                connString = s;

        }

    (六)   以上就是实现一个COM服务,要想使用它那还几步要操作,那就是生成它的一个强名称

    (相当于注册了),步骤如下:

    1.打开vs 2005命令提示符:系统的[开始]->[所有程序]->[Microsoft visual studio 2005]->[Visual studio Tools]->[Visual studio 2005 命令提示]

    2.输入cd 路径(你这个类库所在的文件绝对路径)比如我的文件在E:\C#\电子银行\Bank  E:\C#\电子银行\Bank >然后输入 sn –k Bank.snk;生成密匙Bank.snk为生成的文件名称,( 执行完成后,文件里会多出一个文件Bank.snk )

    (七)   强名称生成完后,回到程序AssemblyInfo.cs中最后几排,可以发现(也可能没有自己写)[assembly: AssemblyKeyFile(" ")]

    把文件路径写进去[assembly: AssemblyKeyFile("..\\..\\server.snk")]

    (八)   在解决方案---…>电子银行\Bank\obj\Debug,在obj \ debug 中会有个Bank.dll回到Visual Studio .Net2005 命令提示,到文件obj\debug目录下(cd obj\debug),执行regsvcs 命令,注册服务。我机器上是这样的E:\C#\电子银行\Bank\obj\debug > regsvcs Bank.dll;(regsvcs *.dll)  这样,服务器就构建完成。

    (九)   打开我的电脑,控制面板 ,管理工具,组件服务,com+应用程序 ,现在我们可以看到com+中多了个,Bank这个就是你所建的服务器

    (十)   server上按右键,打开属性,修改安全性:调用身份验证级别为:无,模拟级别为标识。授权下的勾去掉( 这些是根据情况需要更改的,现在仅仅做个本机上的列子 )。然后找到激活,远程服务器名称 改成你自己机器的IP地址。

    (十一)            建立客户端。建一个winfrom(窗体)ATM,加入引用:using System.EnterpriseServices

     using Bank;在客户端要引用的地方new(创建Bank的对象如private Bank.Bank bank;           Bank为类库,引其中的Bank) 一下就可以直接用其中的方法了。

     

     

    以上便是创建和使用com+的过程,大家相互学习有什么问题一起讨论….

    附部分代码:

    <Bank类库>

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Data.SqlClient;

    using System.Collections;

    using System.EnterpriseServices;

     

     

    //配置Bank组件的安全性,并且说明组件的激活方式是服务器激活

    [assembly: ApplicationAccessControl(

            AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent,//进程安全级别,组件级别

            Authentication = AuthenticationOption.Call,//认证为调用每个方法时都要认证

            ImpersonationLevel = ImpersonationLevelOption.Delegate)]//安全性的扮演角色是代理

    //激活方式:服务器激活

    [assembly: ApplicationActivation(ActivationOption.Server)]

     

    namespace Bank

    {

       

        //定义所有的操作

        //BankOperation 接口的定义

        public interface BankOperation

        {

            .

            //利用卡号取款

            bool WithdrawByCardNo(string CardNo, decimal amount);

        }

     

        //设置支持事务

        [Transaction(TransactionOption.Supported)]

        //使用对象池,最小共享量是10,最大共享容量是50,创建时限是30,单位从毫秒记

        [ObjectPooling(true, 10, 50, CreationTimeout = 30000)]

        //使用用时激活(JITA)

        [JustInTimeActivation(true)]

        //定义构造字符串

        [ConstructionEnabled(Default = "server=.;database=Bank;uid=sa;pwd=sa;")]

        //定义安全角色

        [SecurityRole("bank", true)]

        [ComponentAccessControl]

     

        public class Bank : ServicedComponent, BankOperation

        {

            private string connString;

            public Bank()

            {

     

            }

            //重置Construct()方法

            protected override void Construct(string s)

            {

                base.Construct(s);

                connString = s;

            }

     

            //GetConnection()方法用配置好的连接字符串从数据库获取数据库链接

            private SqlConnection GetConncetion()

            {

                SqlConnection conn = new SqlConnection();

                conn.ConnectionString = connString;

                return conn;

            }

             #region BankOperation 成员

            public bool WithdrawByCardNo(string CardNo, decimal amount)

            {        …………

                string AccountNo;

                bool result;

                AccountNo = QueryAccountNo(CardNo);

                if (AccountNo == "error")

                {

                    result = false;

                }

                else

                {

                    result = WithdrawByAccountNo(AccountNo, amount);

                }

                return result;

            }

            #endregion    }}

     

    <ATM窗体>

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

    using Bank;

     

    namespace 电子银行

    {

        public partial class ATM : Form

        {

          

            private Bank.Bank bank;

     

            public ATM()

            {

               ..

                bank = new Bank.Bank();

            }

        }

    }

  • 相关阅读:
    function 基础运用
    js基础知识2
    JavaScript的一些基础知识
    CSS3中2D3D转换、过渡、动画总结
    css的一些基础属性
    响应式布局和移动端开发
    css3动画
    美化盒子以及bootstrap的简单了解
    利用JS的双重for循环实现九九乘法表
    js练习:金字塔正星星与倒星星
  • 原文地址:https://www.cnblogs.com/gaojun/p/1495893.html
Copyright © 2011-2022 走看看