第十六章 创建Web客户端 - 修改生成的客户端类

2024-06-04 10:52

本文主要是介绍第十六章 创建Web客户端 - 修改生成的客户端类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 第十六章 创建Web客户端 - 修改生成的客户端类
  • 修改生成的客户端类
    • 调整生成的类以处理极长的字符串

第十六章 创建Web客户端 - 修改生成的客户端类

修改生成的客户端类

生成 Web 客户端类后,通常不需要编辑该类。相反,可以编写代码来创建 Web 客户端的实例并提供客户端错误处理。本节记录了修改生成的客户端类时的值得注意的例外情况。

注意:不要创建生成的 Web 客户端类的子类。编译器不会生成正常运行所需的支持类,并且子类将无法使用。

调整生成的类以处理极长的字符串

在极少数情况下,可能需要编辑生成的客户端类以适应极长的字符串或二进制值(长度超过字符串长度限制的值)。

SOAP 向导读取 WSDL 时,它假定任何字符串类型的输入或输出都可以在 IRIS 中表示为 %String,但这并不总是正确的。在极少数情况下,字符串可能会超出字符串长度限制。同样,向导假定任何 XML 类型为 base64Binary 的输入或输出都可以在 IRIS 中表示为 %xsd.base64Binary),但这并不总是正确的,因为存在相同的字符串长度限制。在这两种情况下,WSDL 都不包含任何信息来表明此输入或输出可能超出字符串长度限制。

Web 客户端遇到太长的字符串或二进制值时,它会引发以下错误之一:

  • <MAXSTRING>错误
  • 数据类型验证错误:
ERROR #6232: Datatype validation failed for tag your_method_name ...

(当然,此错误也可能是由数据类型不匹配引起的。)

不过,该问题很容易纠正:调整生成的 Web 客户端类(特别是从 %SOAP.WebClient 继承的类)中的方法签名以使用适当的流类:

  • 使用 %GlobalCharacterStream 而不是 %String
  • 使用 %GlobalBinaryStream 而不是 %xsd.base64Binary

例如,考虑一个 Web 服务 (MyGiantStringService),它有一个方法 (WriteIt),该方法不接受任何参数并返回一个非常长的字符串。如果使用 SOAP 向导生成 Web 客户端类,则 Web 客户端类最初看起来如下所示:

Class GetGiantString.MyServiceSoap Extends %SOAP.WebClient
{Method WriteIt() As %String 
[Final,SoapBindingStyle=document,SoapBodyUse=literal,WebMethod]
{Quit ..WebMethod("WriteIt").Invoke($this,"https://tempuri.org/MyApp.MyGiantStringService.WriteIt")
}}

在这种情况下,只需进行一项调整。更改 WriteIt 的返回类型如下:

Method WriteIt() As %GlobalCharacterStream 
[Final,SoapBindingStyle=document,SoapBodyUse=literal,WebMethod]
{Quit ..WebMethod("WriteIt").Invoke($this,"https://tempuri.org/MyApp.MyGiantStringService.WriteIt")
}

当编译这个类时,系统会根据需要自动重新生成关联的类。

可能还需要调整任何生成的类型类中的属性类型。例如,假设 Web 服务使用名为 <Container> 的元素,其中包括字符串类型的元素 <ContainerPart>。当生成 Web 客户端类时,系统会创建一个具有 %String 类型的 ContainerPart 属性的 Container 类。如果 Web 服务发送的字符串超过 <ContainerPart> 元素中的字符串长度限制, Web 客户端将引发错误。要避免此错误,请将 ContainerPart 属性的类型更改为 %GlobalCharacterStream

这篇关于第十六章 创建Web客户端 - 修改生成的客户端类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029880

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成