大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> COM+ Web 服务:通过复选框路由到 XML Web Services(2) (微软中国)

COM+ Web 服务:通过复选框路由到 XML Web Services(2) (微软中国)

时间: 2021-07-31 作者:daque

工作性组件示例

大略的计划器远算不上处事量沉重的交易运用步调,所以咱们此刻商量带有东西池的适于 com+ 工作性组件的运用步调。最简单处置和摆设的组件是由 servicedcomponent 导出的托管代码组件,如以次 c# 示例所示:using system;using system.reflection;using system.runtime.interopservices;using system.enterpriseservices;using system.data;using system.data.sqlclient;[assembly: applicationname("sctrans")][assembly: applicationactivation(activationoption.server,soapvroot="sctrans")][assembly: assemblykeyfile("sctrans.snk")]namespace sctrans{public interface isctrans{ string countup (string key);}[objectpooling(minpoolsize=0, maxpoolsize=25)][justintimeactivation(true)][classinterface(classinterfacetype.autodual)][transactionattribute(transactionoption.requiresnew)]public class sctranssqlnc : servicedcomponent, isctrans{ [autocomplete] public string countup (string key) {_command = new sqlcommand("", _connection);_command.commandtype = commandtype.text;_command.connection.open(); _command.commandtext = "update callcount with (rowlock) set callcount = callcount + 1 where machine='" + key + "'"; _command.executenonquery();_command.connection.close(); _numcalls++; return (_numcalls + " nc " + _guid); }protected override bool canbepooled() { return true;} private int _numcalls = 0; private string _guid = guid.newguid().tostring(); private sqlconnection _connection =new sqlconnection("user id=myuser;password=my!password; database=soaptest;server=myserver"); private sqlcommand _command;}}

要创造并运转此 c# 组件,在实行编纂贯穿值以贯穿到 microsoft sql server™ 数据库之后,须要运用 sn.exe 天生 sctrans.snk 巩固称呼要害字文献,而后在 using 语句中运用步调集援用对其举行编写翻译。即使您在效劳器长进行安置,应运用 gacutil.exe(即使正在运用 sdk)或经过 .net 框架用户界面将步调集放入 gac,而后运转 regsvcs.exe,备案 com+ 托管组件。regsvcs.exe 将运用以部下性,将组件颁布为效劳器上的 soap 端点和效劳器(过程外)激活:[assembly: applicationactivation(activationoption.server,soapvroot="cssoapsql")]

此组件在每种本领挪用中运用各别的工作,具备一个机动实行本领,并被摆设为举行缓冲。运用托管和非托管 com+ 组件时,东西池和工作将如所预期的那么经过 soap 运转。比方,即使运用下列 vbscript 经过 soap 考察以次 servicedcomponent:mon = "soap:wsdl=http://jnoss3/sctrans/sctrans.sctranssqlnc.soap?wsdl"wscript.echo(mon)for i = 1 to 2 set c = getobject(mon) for j = 1 to 10wscript.echo i & " " & j & " " & c.countup("scwkonc")nextnext

将表露以次输入实质:c:\moniker>actscwkomicrosoft (r) windows script host version 5.6copyright (c) microsoft corporation 1996-2001. all rights reserved.soap:wsdl=http://jnoss3/sctrans/sctrans.sctranssqlnc.soap?wsdl1 1 486 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 1 2 487 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 1 3 488 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 1 4 489 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 1 5 490 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 1 68 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 1 79 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 1 8 10 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 1 9 494 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 1 10 495 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 2 1 13 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 2 2 14 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 2 3 15 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 2 4 499 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 2 5 17 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 2 6 501 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 2 7 502 nc 6e41f32f-74be-45f0-94c0-989e7e1c5672 2 8 19 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 2 9 20 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce 2 10 21 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce

这即是所预期的缓冲的组件:从缓冲池中拖出东西并从新运用。运用存户端激活的缓冲组件的动作都是沟通的。非托管组件的东西池和工作也如所预期的那么运转(固然 visual basic 6.0 组件不扶助东西池)。须要为大普遍非托管运用步调经过 com+ 处置东西树立缓冲和工作属性。传播援用

wko 与 cao 模子的一个要害辨别在乎它们向有状况的东西传播援用的本领。以次是 c# servicedcomponent 示例,表露了此操纵的基础办法:using system;using system.reflection;using system.enterpriseservices;using system.runtime.interopservices;[assembly: applicationname("refpass")][assembly: applicationactivation(activationoption.server,soapvroot="refpass")][assembly: assemblykeyfile("refpass.snk")]namespace refpass{public interface iparent{string setref(object inkid);object getref();string countup(object obj); }public interface ichild{string getvalue ();string countup();void setname(string key);}[classinterface(classinterfacetype.autodual)]public class parent: servicedcomponent, iparent{protected child _kid = null;public string setref(object inkid){_kid = (child)inkid;return _kid.getvalue();}public object getref(){return (object)_kid;}public string countup(object obj){child kid = (child)obj;if (kid == null) return _kid.countup();else return kid.countup();} }[classinterface(classinterfacetype.autodual)]public class child : servicedcomponent, ichild{private int _counter = 0;private string _name = "none";public string countup() { _counter++; return getvalue(); }public string getvalue() { return (_name + " "+_counter.tostring()); }public void setname(string key) { _name = key; }}}

此 c# 步调有两个类:child 和 parent。即使运转以次 vbscript 示例,wko 与 cao 模子的辨别会越发鲜明:set c1 = getobject ("soap:wsdl=http://jnoss4/refpass/refpass.child.soap?wsdl")set c2 = getobject ("soap:wsdl=http://jnoss4/refpass/refpass.child.soap?wsdl")c1.setname("c1")wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()c2.setname("c2")wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()

运转时将表露以次输入实质:c:\moniker>refpasswkomicrosoft (r) windows script host version 5.6copyright (c) microsoft corporation 1996-2001. all rights reserved.none 1none 1none 1none 1none 1none 1none 1none 1none 1none 1

称呼和值说领会简单挪用已知东西的无状况本质,由于组件是运用各别的本领挪用创造的,以是本领挪用之间不保持称呼或值。即使导出存户端代劳,而后导出到另一台存户端计划机上,而且运转了底下的 vbscript,则 soap 激活将是 cao 而不是 wko:'径直创造两个东西set c1=createobject("refpass.child")set c2=createobject("refpass.child")'树立第一个东西的称呼,并挪用数次'以递加东西里面计数器c1.setname("c1")wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()'树立第一个东西的称呼,并挪用数次'以递加东西里面计数器c2.setname("c2")wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()'创造父东西set p=createobject("refpass.parent")'将子东西传播到父东西,并从父东西挪用子东西wscript.echo p.setref(c1)wscript.echo p.countup(c2)wscript.echo p.countup(c2)wscript.echo p.countup(c2)wscript.echo p.countup(c2)'此刻挪用保存在父东西里面的子东西dim c9wscript.echo p.countup(c9)'从父东西获得该东西并径直挪用set c3 = p.getref()wscript.echo c3.countup()

从吩咐行运转时,将表露以次输入实质:c:\moniker>refpassclmicrosoft (r) windows script host version 5.6copyright (c) microsoft corporation 1996-2001. all rights reserved.c1 1c1 2c1 3c1 4c1 5c2 1c2 2c2 3c2 4c2 5c1 5c2 6c2 7c2 8c2 9c1 6c1 7

纵然在经过 soap 挪用时,cao 激活也会保持状况,而且承诺经过 soap 往返传播东西援用。称呼和值都保持在效劳器上的类范例中,而且援用不妨精确处事。这两种剧本都挪用沟通的编写翻译 c# 组件,不过 .net remoting 激活模子各别。除去运用 createobject 挪用 cao 激活外,还不妨运用带有 com+ 的名字东西,它不妨供给 cao 激活来代替 wko(典型称呼和步调集名字东西)。以次剧本:'径直创造两个东西set c1=getobject("soap:typename=refpass.child,assembly=refpass")set c2=getobject("soap:typename=refpass.child,assembly=refpass")'树立第一个东西的称呼,并挪用数次'以递加东西里面计数器c1.setname("c1")wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()wscript.echo c1.countup()'树立第二个东西的称呼,并挪用数次'以递加东西里面计数器c2.setname("c2")wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()wscript.echo c2.countup()'创造父东西set p=getobject("soap:typename=refpass.parent,assembly=refpass")'将子东西传播到父东西,并从父东西挪用子东西wscript.echo p.setref(c1)wscript.echo p.countup(c2)wscript.echo p.countup(c2)wscript.echo p.countup(c2)wscript.echo p.countup(c2)'此刻挪用保存在父东西里面的子东西dim c9wscript.echo p.countup(c9)'从父东西获得该东西并径直挪用set c3 = p.getref()wscript.echo c3.countup()

将表露以次输入实质:c:\moniker>refpasscamicrosoft (r) windows script host version 5.6copyright (c) microsoft corporation 1996-2001. all rights reserved.c1 1c1 2c1 3c1 4c1 5c2 1c2 2c2 3c2 4c2 5c1 5c2 6c2 7c2 8c2 9c1 6c1 7

这与上头的 vbscript createobject(progid) 示例的输入实质沟通。由于惯例 com+ 激活路途被 soap 代理当用步调截获,以是不妨运用 cocreateinstance、createinstance 以及其余保守的 com+ 激活本领来挪用运用 com+ web 效劳的存户端激活的东西。步调集和典型称呼名字东西,对于从托管代码存户端长途获得预先摆设的存户端激活也很有效,如次例所示:imports systemimports system.runtime.interopservicesmodule refpassclsub main()dim childmoniker = "soap:assembly=refpass,typename=refpass.child"dim parentmoniker = "soap:assembly=refpass,typename=refpass.parent"dim c1,c2,p as objectc1 = marshal.bindtomoniker(childmoniker)console.writeline(c1.setname("c1"))console.writeline(c1.countup())console.writeline(c1.countup())console.writeline(c1.countup())console.writeline(c1.countup())console.writeline(c1.countup())c2 = marshal.bindtomoniker(childmoniker)console.writeline(c2.setname("c2"))console.writeline(c2.countup())console.writeline(c2.countup())console.writeline(c2.countup())console.writeline(c2.countup())console.writeline(c2.countup())p = marshal.bindtomoniker(parentmoniker)console.writeline(p.setref(c1))console.writeline(p.countup(c2))console.writeline(p.countup(c2))console.writeline(p.countup(c2))console.writeline(p.countup(c2))dim c9console.writeline(p.countup(c9))dim c3 = p.getref()console.writeline(c3.countup()) end subend module

编写翻译并运转此 visual basic .net 运用步调,将爆发与前方两个 vbscript cao 示例沟通的输入实质。由于效劳器运用步调将组件颁布为 cao 和 wko 两种情势,以是由长途存户端采用激活本领。固然大概只对学术接洽有意旨,然而简单存户端计划机真实不妨运用同一组件的两种长途激活本领,考察长途效劳器上同一个 soap 颁布的假造根。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.