远程调用技术代码追踪(webservice).docx

远程调用技术代码追踪(webservice).docx

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最近阅读了 SocketConn 的源码和 WebService 的源码,把追踪的过程写了下来,方便大家学习。毕竟这需要精力,时间和毅力。感谢煮茶待英雄博志区和三层数据库讨论区兄弟们的支 持,特别是 julian 兄弟,不是他,我可能没耐心继续下去。如果有时间,大家可以继续完善。从 socket 和 Websevice 的底层实现细节,我们发现 BORLAND 的工程师们的构思和实现的过程。我觉得这对我们的学习应该是非常重要的。学会思考。学会读源码,学会分析。 希望和我交往的朋友可通过 QQ 或 Email 联系我。 Wu_yanan2003@ 另见:《远程调用技术代码追踪(socket) 》 关注我的:《远程调用技术代码追踪(第三方控件) 》 远程调用技术内幕 有关 WebService 的相关的知识,我就不说了,我直接分析源码。有问题的地方请参考李维的书。 initialization InvRegistry.RegisterInterface(TypeInfo(IMyFirstWS), urn:MyFirstWSIntf-IMyFirstWS, utf-8); 看过李维的分布式架构的应该都知道,WEB 服务端对类和接口进行了注册,客户端这里也进行了注册。然后客户端把数据通过 HTTP 传输到服务器端,服务器端通过拆包,去到注册管理的类中寻找相应的接口,并创建一个相应的对象,把客户端的数据压进去,调用后, 把数据再传回来。 在调用这句的时候,TinvokableClassRegistry 类已经创建了,由于 inquire_v1 也引用了 InvRegistry 注册,所以在哪里被引用的时候已经被创建了。function InvRegistry: TInvokableClassRegistry; begin if not Assigned(InvRegistryV) then InitIR; Result := InvRegistryV; end; 初次引用会调用 InitIR 方法。 procedure InitIR; begin InvRegistryV := TInvokableClassRegistry.Create; RemTypeRegistryV := TRemotableClassRegistry.Create; RemClassRegistryV:= RemTypeRegistry; InitBuiltIns; //定们到这一句: InitXSTypes; InitMoreBuiltIns; end; 先看 InvRegistryV := TInvokableClassRegistry.Create;,这个类是用来注册,相应的接口及类, 并能够根据 soap 封包内容找到相应的接口及方法。 TRemotableClassRegistry = TRemotableTypeRegistry; 所对应的是 TremotableTypeRegistry, 这个类主要是对数据类型进行注册。 大致来了解一下这个类。 TInvokableClassRegistry = class(TInterfacedObject) private FLock: TRTLCriticalSection; FRegClasses: array of InvRegClassEntry; FRegIntfs: array of InvRegIntfEntry; 这里可以看到,声明了两个动态数组。分别用来放接口注册,及类注册信息。 TCreateInstanceProc = procedure(out obj: TObject); InvRegClassEntry = record ClassType: TClass; Proc: TCreateInstanceProc; URI: string; end; 它包含了 webservice 实现类的指针,以建立实现类的 factory 函数指针。 InvRegIntfEntry = record Name: string; { Native name of interface } ExtName: Widestring; { PortTypeName } UnitName: string; { Filename of interface } GUID: TGUID; { GUID of interface } Info: PTypeInfo; { Typeinfo of interface } DefImpl: TClass; { Metaclass of implementation } Namespace: Widestring; { XML Namespace of type

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档