现在,应用程序已发布为 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