XE10 Android SOAP请求遭遇到Insufficient RTTI available to support this operation异常

本文主要是介绍XE10 Android SOAP请求遭遇到Insufficient RTTI available to support this operation异常,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 背景

XE10 Android 项目

a. 项目中会显示ArcGIS地图

b. 需要两个Timer(timer的间隔是个位数的秒), 定时刷新地图上的数据, 刷新的过程, 就是通过THTTPRIO与webservice进行SOAP通信.


此时, 程序在运行几分钟后, THTTPRIO 请求数据时出现下面的异常, 并且对界面进行操作时, 发现界面卡死:

Insufficient RTTI available to support this operation



2. 示例代码以及进一步说明

使用THTTPRIO 请求数据时的示例代码如下:

function CSoapWebSvrWrapperClass.GetAndroidUpdateUrl(iClientVer: Integer):String;
varhead: MySoapHeader;szResp: String;httpRIO : THTTPRIO;
beginhead := MySoapHeader.Create;szResp := '';tryhead.Unarray := Self.C_UNARRY_HEADER;httpRIO := Self.GetHttpRIO();httpRIO.SOAPHeaders.Send(head);szResp := GetMobileTerminalWSSoap(false, Utils.C_WEB_SVR_ADS + C_WEB_SVR_NAME,httpRIO).GetApkUrl(iClientVer.ToString());finallyFreeAndNil(head);Release(httpRIO);end;result := szResp;
end;

调用上述GetAndroidUpdateUrl方法时, 并未在UI线程中调用(好像也无法在UI线程中调用)


并不是一直失败, 而是执行几分钟后失败, 也就是说, 一开始调用GetAndroidUpdateUrl是成功的, 过几分钟, 莫名其妙的就出现上述RTTI错误.


3. 解决方法

Delphi功力浅, 排查不到问题的原因, 所以采用了曲线救国的方法: Delphi中, 使用TIdHTTP代替THTTPRIO.


也就是把有问题的如下调用:

THTTPRIO ---------SOAP----->WebService(接口)


换成下面这样调用

TIdHTTP-------------HTTP------>WebService(aspx页面)------内部调用--->WebService(接口)


也就是在调用的过程中, 添加了一层WebService(aspx页面)

 

以C#的webservice为例:

a. 在webservice上, 新建一个.aspx文件;

b. aspx文件中不写任何html代码, 只是在Page_Load时, 根据URL的参数, 调用webservice上的接口

c. aspx使用Response.Write();方法, 将webservice接口的返回值返回.


4. 总结

虽然不知道RTTI是如何产生的, 但是, 目前看来, 这个问题没有出现了....Delphi坑深, 慎入, 需深入.

这篇关于XE10 Android SOAP请求遭遇到Insufficient RTTI available to support this operation异常的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D