加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

抓虫记之二:WSDL中消失的函数定义

发布时间:2020-12-17 01:16:28 所属栏目:安全 来源:网络整理
导读:还是那句老话,现象总是扑朔迷离。 这次的现象更加奇怪,在一个webservice的接口定义中,某个新定义的方法总是看不到。可是看了实现代码,确实已经公布了。这是为什么呢? 先说明一下实现环境,这个是在Delphi环境下编写WebService的。大家可能说VisualStudi

还是那句老话,现象总是扑朔迷离。

这次的现象更加奇怪,在一个webservice的接口定义中,某个新定义的方法总是看不到。可是看了实现代码,确实已经公布了。这是为什么呢?

先说明一下实现环境,这个是在Delphi环境下编写WebService的。大家可能说VisualStudio就不会有这样的问题了,这个我不否认,但是我相信了解这个过程,对大家会有很多帮助的。

其实,不管哪种语言,WSDL的描述基本都是自动生成的,也不需要我们去做任何额外工作。但是,既然这里面出现了问题,就只能硬着头皮去了解这些内部实现了。

在Delphi中,是在WebModule中的TWSDLHTMLPublish类型的组件来完成的。而这个组件,在获取HTTP请求之后,在接口定义中查找,找到后,依据RTTI,翻译成WSDL描述语言。

在跟踪代码的过程中,发现找到接口之后,明明接口定义了12个方法,调试器却只显示10个方法,少了2个方法。甚么原因呢?

说实话,我不是圣人。我一开始确实怀疑Delphi的编译器出问题了。但后来强迫自己休息了一下之后,突然领悟到,既然方法不一样多,是不是找错了接口定义呢?

这是一个伟大的跳跃式思维。因为,我开始怀疑错误来源于我自己。很多时候就是这样,怀疑别人,总是找不到答案。怀疑自己,却只有一步之遥就可以成功。

原来,我在实现这个WebService的时候,由于协作的需要,需要调用其他的WebService。本来这是没有问题的。但是,我做了一个偷懒的工作。我把一些常用的Webservice全部集中起来了,这样其他应用程序调用的时候非常方便。不巧的是,这些常用的Webservice中,就包含今天出错的这个。

也就是说,在服务器的实现过程中,很可能出现了接口的重复定义!因为Delphi在服务器注册机制,和客户端代理(Proxy)的注册机制是一样的,这导致了冲突!

检查了一下代码,果然如此。原来,由于服务器新的接口一直没发布,所以,服务器的客户端代理接口也没更新,这样,就出现了两个版本的接口定义。

开头出现的消失的函数定义,在调整完接口注册顺序,又神奇般出现了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读