现在,应用程序已发布为 xml web services,并且可以使用 soap 激活。使用 internet explorer 浏览到 http://localhost/vb6soap/default.aspx,您会在该 aspx 页上发现一个超链接,通过它可以链接到您的组件所生成的 wsdl。以下 vbscript 将激活您的组件:
set c = getobject
("soap:wsdl=http://localhost/vb6soap/vb6soap.calc.soap?wsdl")
for i = 1 to 10
wscript.echo i & " " & c.add(i,i) & " " & time
next
如果用您的服务器名称替换上面脚本中的 localhost,它也可以在远程客户端计算机上正常工作。引用的页面(在此示例中为 vb6soap.calc.soap)是以 .soap 后缀结尾的组件 progid。
要通过 soap toolkit(与 windows xp professional 一起提供,并且不使用 .net remoting)访问同一端点,请运行以下 vbscript:
set c = createobject("mssoap.soapclient")
c.mssoapinit("http://localhost/vb6soap/vb6soap.calc.soap?wsdl")
for i = 1 to 10
wscript.echo i & " " & c.add(i,i) & " " & time
next
要简化在服务器上发布 soap 的过程,您可以使用 microsoft c#™ 或 visual basic .net,并从 servicedcomponent 继承。下面是简单托管组件的托管代码示例:
using system;
using system.reflection;
using system.runtime.interopservices;
using system.enterpriseservices;
[assembly: applicationname("cssoap")]
[assembly: applicationactivation(activationoption.server,
soapvroot="cssoap")]
[assembly: assemblykeyfile("cssoap.snk")]
namespace cssoap
{
public interface icalc
{
double add (double value1, double value2);
}
[classinterface(classinterfacetype.autodual)]
[transactionattribute(transactionoption.none)]
public class calc : servicedcomponent, icalc
{
public double add (double value1, double value2);
{
return (value1 + value2);
}
}
}
上述示例中值得注意的是 applicationactivation 属性:
[assembly: applicationactivation(activationoption.server,
soapvroot="cssoap")]
建立 c# 组件,将它安装在全局程序集缓存中,然后运行 regsvcs.exe 将它注册为 com+ 应用程序。这样,该组件就被发布为 iis 虚拟根和 soap 端点。要成功地远程使用 servicedcomponent,还需要使用 gacutil.exe 或 .net 框架用户界面,将这个编译后的程序集放入全局程序集缓存 (gac) 中。要通过 wsdl 访问此 soap 端点,请使用以下 vbscript:
set c = getobject
("soap:wsdl=http://localhost/cssoap/cssoap.calc.soap?wsdl")
for i = 1 to 10
wscript.echo i & " " & c.add(i,i) & " " & time
next
作为 soap 交互操作性的简单示例,soap toolkit 与 windows xp professional 一起提供,并且即使运行 windows xp 的客户端计算机上没有安装 .net 框架,使用以下 vbscript 也可以访问 com+ soap 端点:
set c = createobject("mssoap.soapclient")
c.mssoapinit("http://localhost/cssoap/cssoap.calc.soap?wsdl?
for i = 1 to 10
wscript.echo i & " " & c.add(i,i) & " " & time
next
