第十五章 创建Web客户端 - 类包名称的 SOAP 向导规则
类包名称的 SOAP
向导规则
SOAP
向导对类包名称应用以下规则:
-
Web
客户端包和Web
服务包字段中指定的包包含主要生成的Web
客户端或Web
服务类。这些值由在向导的上一页中输入的内容进行初始化。 - 如果向导还生成一个策略类(因为
WSDL
包含WS-Policy
信息),则默认情况下该类位于同一包中。要指定不同的包,请指定配置子包的值。
默认情况下,类名称是 Web
客户端或服务名称,并附加 Config
。如果为配置子包指定一个值,则生成的类与 Web
客户端或服务具有相同的名称(但位于给定的子包中)。
- 对于生成的任何支持类,向导会检测
WSDL
中使用的所有名称空间。默认情况下,它将生成的类组织到包中,每个名称空间对应一个包。
可以选择编辑这些包名称。
并非所有名称空间都必须对应于生成的类。例如,本示例中使用的 WSDL 使用命名空间 https://schemas.xmlsoap.org/wsdl、https://schemas.xmlsoap.org/wsdl/mime
和 https://schemas.xmlsoap.org/wsdl
。在这种情况下,这些命名空间中没有生成的类,并且不会生成相应的包。
以编程方式生成客户端类
可以使用 %SOAP.WSDL.Reader
类以编程方式生成客户端类。
生成的类及其组织可能与使用 SOAP
向导时不同,后者提供了对生成类的包的更好控制。
以编程方式生成客户端类:
- 创建
%SOAP.WSDL.Reader
的实例。 - (可选)设置属性来控制实例的行为。有关详细信息,请参阅
%SOAP.WSDL.Reader
的类文档。
请注意,如果 WSDL
位于使用 SSL
的位置,%SOAP.WSDL.Reader
将(默认情况下)检查证书服务器名称是否与用于连接到服务器的 DNS
名称相匹配。如果这些名称不匹配,则不允许连接。此默认行为可防止中间人攻击,并在 RFC 2818
第 3.1
节中进行了描述;另请参阅 RFC
2595
在新选项卡中打开,第 2.4
节。
要禁用此检查,请将实例的 SSLCheckServerIdentity
属性设置为 0
。
- 如果您需要以
%SOAP.WSDL.Reader
不直接支持的方式控制HTTP
请求,请执行以下操作:
a. 创建 %Net.HttpRequest
的实例并根据需要设置其属性。
b. 对于 %SOAP.WSDL.Reader
实例,将 HttpRequest
属性设置为等于您刚刚创建的 %Net.HttpRequest
实例。
- 调用实例的
Process()
方法:
method Process(pLocationURL As %String, pPackage As %String = "") as %Status
-
pLocationURL
- 必须是Web
服务的WSDL
的URL
或WSDL
文件的名称(包括其完整路径)。根据Web
服务的配置,可能需要附加提供合适用户名和密码的字符串;请参阅示例。 -
pPackage
- 是生成的类的包的名称。如果未指定包, 将使用服务名称作为包名称。
注意:如果此包与现有包相同,则默认情况下该工具会覆盖任何具有相同名称的现有类。要防止该工具覆盖类定义,请将以下内容添加到该类定义中:Parameter XMLKEEPCLASS = 1;
下面显示了一个终端会话示例:
set r=##class(%SOAP.WSDL.Reader).%New()
GSOAP>set url="https://devsys:52773/csp/mysamples/GSOP.AddComplexWS.CLS?WSDL=1"
GSOAP>d r.Process(url)
Compilation started on 11/09/2009 12:53:52 with qualifiers 'dk'
Compiling class AddComplex.ns2.ComplexNumber
Compiling routine AddComplex.ns2.ComplexNumber.1
Compilation finished successfully in 0.170s.
Compilation started on 11/09/2009 12:53:52 with qualifiers 'dk'
Compiling class AddComplex.AddComplexSoap
Compiling routine AddComplex.AddComplexSoap.1
Compiling class AddComplex.AddComplexSoap.Add
Compiling routine AddComplex.AddComplexSoap.Add.1
Compilation finished successfully in 0.363s.
WSDL URL
是 Web
应用程序的一部分,可能受到密码身份验证的保护。有关在这种情况下使用 WSDL
生成 Web
客户端或第三方 Web
客户端的详细信息,请参阅使用受密码保护的 WSDL URL
。
在所有情况下,也可以在提供所需的用户名和密码后从浏览器检索 WSDL
,将其保存为文件并使用该文件。