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

9 篇文章 0 订阅
8 篇文章 0 订阅

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

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

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值