首页 > 开发 > XML > 正文

COM+ Web 服务:通过复选框路由到 XML Web Services (转)6

2024-09-05 20:55:50
字体:
来源:转载
供稿:网友
要建立并运行此 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 10
  wscript.echo i & " " & j & " " & c.countup("scwkonc")
next
next

将显示以下输出内容:

c:/moniker>actscwko
microsoft (r) windows script host version 5.6
copyright (c) microsoft corporation 1996-2001. all rights reserved.

soap:wsdl=http://jnoss3/sctrans/sctrans.sctranssqlnc.soap?wsdl
1 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 6  8 nc af26b53b-4a1f-48c8-8880-518c2b55a7ce
1 7  9 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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表