无需WEB服务器的WEBServices
本文将介绍如何将Indy控件组与Delphi 6的Web Services (SOAP)支持相结合。关于如何创建Web Services的更多信息,请参阅Nick Hodges的文章,《Web上的莎士比亚》(原文在Borland社区,地址:http://community.borland.com/article/0,1410,27399,00.html。
我记不得为什么要写下面这个程序了。无论如何,应该是想找到创建独立Web服务的方便法子--也就是说,不需要Web服务器的支持。
查阅了在新闻组borland.public.delphi.webservices.soap上最近的帖子,还有一些其它地方的来的提示之后,我写出以下的代码,而且还顺便清理了一下大脑中乱如蛛网的思路。然后就写了这篇文章。
把Indy结合到WebBroker
Delphi 6 SOAP支持组件基于WebBroker。很典型地,在WebBroker应用中,实现IWebDispatch的组件放置于TwebModule上。至于SOAP服务器,这个组件则是THTTPSOAPDispatcher:
我们的目的是尽量不要改动缺省的设置,所以不能去乱改动SOAP组件。我的注意力集中到了WebBroker上。
观察WebBroker架构,我发现底层是独立于应用程序类型。ISAPI、CGI,管它呢,这无关紧要。基本原则是一样的:你从客户端得到一个请求(TwebRequest),然后在服务器端作出回应(TwebResponse)。
Indy组件TIdHTTPServer的请求/回应机制与此相似。所以我打算实现一些与ISAPI和CGI中差不多的封装类,钩到TIdHTTPServer的CommandGet方法中,这样来截获和处理请求。
结果就得到了IndyAPP.pas和IndyHTTP.pas中的代码(ISAPI、CGI等等的相应单元为xxxApp和xxxHTTP)。注意,我没有填满所有的TwebRequestIndy和TwebResponseIndy类方法,或许某人比我更熟悉Indy的,能够完成这个工作。
使WebAppDebugger支持Indy
因为没有"Indy SOAP Server Application"向导(也许以后我会自己写一个),而且目标是创建独立exe程序,所以最具合理性的举动就是从SOAP Server Applicatioin向导开始(File|New|Other,Web Services页,SOAP Server Application)。
选择Web App Debugger executable。我就是这么做的。我用Dummy这个简单的词作为CoClass名称,因为这里创建的代码将移往其它地方。
在主窗体的实现部分:
unit Unit1; interface uses
SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation uses ComApp; {$R *.DFM} const
CLASS_ComWebApp: TGUID = '{44139136-EFD0-4044-8A3C-13484508A833}'; initialization
TWebAppAutoObjectFactory.Create(Class_ComWebApp, 'Dummy', 'Dummy Object'); end.
我把CLASS_ComWebApp常量和Initialization部分移除了。
条件定义{$APPTYPE GUI}并不需要,所以也移去了。
在uses部分,我把COMApp改为IndyApp,而且在Application.Initialize之前,把DefaultPort属性设置为合适的端口号(1024),主窗口创建后,用Active打开它。
服务,请服务v
使用Invokable Wizard(我和Borland的共同作品),我创建了一个简单的接口和invokable class。把实现单元(DemoImpl)加到项目的uses子句(以确保invokable class在程序运行时被注册)。一切就绪了。
运行程序,在浏览器中键入http://localhost/1024/wsdl/IDemo。看!WSDL发布了!
几个小时的心血、眼泪和汗水没有白费,咱们也可以拥有自己的独立Web Service应用了。无需考虑.NET,甚至不用Web服务器支持。
无需WEB服务器的WEBServices的更多相关文章
- 搭建手机web服务器-----内网穿透(无需Root)
搭建手机web服务器-----内网穿透(无需Root) 一.内网穿透部分 前言: 网上内网穿透的方法很多,像花生壳.Ngrok.Frp等等,但是大多都需要获取手机root权限 本文使用的软件是Term ...
- TinyFox v2.3.2 正式发布,跨平台的.NET OWIN WEB服务器
TinyFox 是一款按照 OWIN 协议开发的以支持各类 OWIN 应用为主要特征的高性能 WEB 服务器,2.3.2版已经正式发布,下载地址 http://www.linuxdot.net/. ...
- 如何在Web服务器80端口上开启SSH服务
本文所讨论的网络端口复用并非指网络编程中采用SO_REUSEADDR选项的 Socket Bind 复用.它更像是一个带特定路由功能的端口转发工具,在应用层实现. 背景 笔者所处网络中防火墙只开放了一 ...
- linux web服务器静态资源的处理 unison+inotify双向同步
linux web服务器静态资源的处理 unison+inotify双向同步 http://monkeyzhu.blog.51cto.com/5764358/1324391 简介 unison可以使两 ...
- Web服务器集群搭建关键步骤纪要
前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...
- 使用Vert.x构建Web服务器和消息系统
如果你对Node.js感兴趣,Vert.x可能是你的下一个大事件:一个建立在JVM上一个类似的架构企业制度. 这一部分介绍Vert.x是通过两个动手的例子(基于Vert.x 2.0). 当Node.j ...
- 快速搭建Web服务器软件PHP+Apache+MySQL
搭建网站或者博客,需要一个合适的 Web 服务器.除了如下能在购买的虚拟空间上进行操作外,我们也可以在自己的电脑上搞定,因为可以用来方便快捷地测试网站或者博客主题,无论是 Wordpress.Joom ...
- 嵌入式设备web服务器比较
目录(?)[-] Boa Thttpd Mini_httpd Shttpd Lighttpd Goahead AppWeb Apache 开发语言和开发工具 结论 备注 现在在嵌入式设备中所使用的 ...
- 嵌入式设备web服务器
操作系统:ubuntu10.04 前言: 为了提高对设备的易操作性,很多设备中提供pc机直接通过浏览器操作设备的功能.这就需要在设备中实现web服务器. 现在在嵌入式设备中所使用的web服 ...
随机推荐
- java计时代码
public class Test{ public static void main(String[] args) { long startMili=System.currentTimeMillis( ...
- flot图表的使用
Flot是一套用Javascript写的绘制图表用的函式库, 专门用在网页上执行绘制图表功能, 由于Flot利用jQuery所以写出来的, 所以也称它为jQuery Flot ,它的特点是体积小.执行 ...
- Codeforces 367
A. Sereja and Algorithm 水题不解释. B. Sereja ans Anagrams 模p同余的为一组,随便搞. C. Sereja and the Arrangement of ...
- Mongoose:Schema之路
说明:本文在个人博客地址为edwardesire.com,欢迎前来品尝. Mongoose学习 这里的Mongoose当然不是图片上的萌物,它是一个MongoDB对象建模工具(object model ...
- 防asp木马运行
首 页 > 技术支持 防asp木马运行 目前比较流行的ASP木马主要通过三种技术来进行对服务器的相关操作. 一.使用FileSystemObject组件 FileSystemObject可以对文 ...
- PLSQL存储过程校验身份证
CREATE OR REPLACE FUNCTION FUN_CHECKIDCARD(PI_AAC002 VARCHAR2) RETURN VARCHAR2 IS /*************** ...
- [iOS基础控件 - 6.11.2] - UINavigationController 多控制器 简单使用
A.概念 1.通常一个app有多个控制器 2.需要对这些控制器进行管理 3.有多个view的时候,用一个父view去管理多个子view 4.控制器管理也是如此,使用给一个父控制器,去控制子控制器 ...
- Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
动作游戏 还记得读书的时候熬夜打<波斯王子>的时光,我们的王子通过跳跃穿过墙壁的小洞.在高层建筑上进行攀爬和跳跃,还有在操作失误掉下高楼和触发必死机关后使用时之沙的时光倒流功能回归死亡之前 ...
- 关于 jquery cookie的用法
东钿微信公众平台新版上线 需要一个引导用户操作步骤.设置一个cookie师傅偶第一次访问此页面 .如果是则跳出用户引导,如果不是,正常显示. 一开始在百度了一段jquery cookie插件,也没仔细 ...
- WinForm中的DataGridView控件显示数据字典方案2
winform代码分析object数据库 做这部分功能的时候,上网搜索了很多资料,发现很少涉及到这方面的解决方案,找了相关的问题帖子,很多人都叫使用视图去处理,当然,用视图是可以解决这个问题,但是,这 ...