Web Server的新手。(300分)

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间

程云

Unregistered / Unconfirmed
GUEST, unregistred user!
现在要作Delphi的Web Server方面的程序开发了,
第一个项目是网络流量和计费的查询。
我没有作过类似的程序,也没有一点这方面的经验。
请给点提示,或是资料和例程什么的。
 
我也很关注,顺便帮你提前。:-)
 
是要监测流量吗? 还是只要做数据的查询?
 
我只是作数据查询。
现已有一个软件来记录这些,

我的任务是从数据库中查出来,
提供用户在线查询,
这要用C/S来作,哪是好简单,

但要作成Web Server的,
我可没有作过这东西。
看了一天书,总算还有了点底了。
 
这样的要求,好像用不到Delphi来做,ASP VBScript或JavaScript就行了。用Delphi来做
也不是不可以,但和页面进行数据交互时太痛苦了,PageProducer也不是一个很好用的东西。

我先前在做我们公司的网站时,一门心思地想着所有东西都要用Delphi来做,但光是在
如何生成美观灵活的动态页面上就花了太多的时间和精力,最后还不得不放弃,结果因
拖延了项目工期,还受要了责罚。

如果你们要做的网站达不到较大的访问量,用脚本来写应该是能满足的了,如果需求很高,
倒是应该用ActiveX组件和COM+。当然,我的程序里也有一部分是安装在COM+中的ActiveX
组件实现的,这部分是调用频率较高的方法,且我认为用VBScript不好实现(VBScript的
语法真龌龊!)
 
要下班了,补充一句:用Dreamweaver UltraDev来做很方便的,它能辅助你生成很多代码
(尽管那些代码中用不到的垃圾很多,但总比所有都自己写来得快)
 
上面的仁兄说得很对呀.delphi做出来的页面真的是很难改,而那个生成的html代码又不能
修改,要不然可以真接在里面写asp代码,那倒是可以事半功倍!
 
如果 只是查询,那用ASP做, 两天就搞定了。
 
对了,程云大侠 你叫 左轻侯 大侠帮个忙就行 , 我想说不定他一天就能帮你搞定了。
 
程云:
我想这个难不到你的,您老只要看看webservice技术的文档,就可以轻松搞定:)
 
http://www.xmethods.com/
 
我喜欢用Indy组件开发Web Server
 
我也在做这方面的,大家多谈谈三
 
全用Delphi得不偿失,用ASP做,其中关键部分用组件,Delphi实现
 
与页面交互频繁的地方用ASP做,不与页面交互的后台操作可以用Delphi做,尤其是调用频繁
的function尽量用Delphi做,比如说你的网站上要进行数据汇总并生成报表,汇总部分的程序
就应该用Delphi来做(因为汇总需要较大的运算量),汇总完的数据写在一个表里,再用
ASP来显示。尽量少用或不用PageProducer为好,别自找麻烦。
 
用ASP,JSP样更高效。我给个ISAPI例子你:

Delphi开发WEBMAIL程序
通常,实现WEBMAIL采用mailto.exe的CGI、在HTML文件中写入“< form action=”mailto:电子邮箱地址” method=post >”语句或者调用WINDOWS API函数。采用WINDOWS API 和在HTML文件中写入“< form action=”mailto:电子邮箱地址” method=post >”语句都要求用户的浏览器装入EXCHANGE、OUTLOOKEXPRESS、或OUTLOOK等软件,而且还有一些浏览器不支持MAILTO语句。而采用CGI的形式实现WEBMAIL对用户的浏览器没有要求,但效率不高。CGI技术正在逐渐被ISAPI/NSAPI技术所取代。本文就来讨论一下采用ISAPI技术实现WEBMAIL。

使用Delphi 4开发Web Server程序是非常简单的,Delphi 4中提供了大量的元件和对象,支持Web Server程序的开发。 下面通过一个例子来介绍如何利用DELPHI开发一个响应用户输入的ISAPI的WEBMAIL程序。只有在发送服务器上注册的用户才能通过在浏览器发送邮件。为了简单,程序没有对传送的数据提供保密。

首先,在WEB服务器端安装数据库引擎dbe,并设置好数据库别名:yh,指向一个包含用户名和用户密码的数据库文件user.db。接着建立两个HTML文件,名字分别为:dl.html,qd.html,放在WEB服务器的缺省目录下(如:C:INETPUBWWWROOT)。

---- 在DELPHI中新建一个基于ISAPI的WEB SERVER APPLICATION,手动增加nmsmtp1,query1,pageproducer1。

其中:pageproducer1的property: htmlfile:c:inetpubwww.rootqd.html。nmsmtp1的 property:host(发送邮件服务器的地址。)在这里为smtp.netease.com.。port:25。 全局变量为: sername:string;flag:boolean;

增加一个路径为/feedback的动作项,其代码如下:
procedure TWebModule1.WebModule1WebActionItem1
Action(Sender: TObject;
Request: TWebRequest; Response:
TWebResponse; var Handled: Boolean);
Var Count:integer;
S:string;
Begin
Query1.close;
Query1.sql.clear;
S:=’select count(username) from
user.db where username=”’;
S:=s+request.contentfields.values[‘username’]+’”’;
S:=s+’ and password=”’;
S:=s+request.contentfields.values[‘psword’]+’”’;
Query1.sql.add(S);
Query1.open;
If query1.count=0
then response.content:=’< html >< head >< title >
< /title >< body >用户名、密码不正确,请重新输入
< /body >< /html >’
Else
Username:=request.contentfields.values[‘username’];
Response.content:=pageproducer1.content;
End;

再增加一个路径为/sendmail 的动作项,
它的程序代码如下:
procedure TWebModule1.WebModule1Web
ActionItem2Action(Sender: TObject;
Request: TWebRequest; Response:
TWebResponse; var Handled: Boolean);
Var body:string;
Begin
Flag:=true;
body:=request.contentfields.values[‘body’];
Pageproducer1.htmldoc.clear;
Pageproducer1.htmldoc.add(‘< html >< body >’);
Nmsmtp1.postmessage.clear;
Nmsmtp1.postmessage.fromaddress:=username+
’@netease.com’;
Nmsmtp1.postmessage.from:=username;
Nmsmtp1.postmessage.body.add(body);
Nmsmtp1.postmessage.toaddress.add
(request.contentfields.values[‘toaddress’]);
Nmsmtp1.postmessage.subject:=
request.contentfields.values[‘subject’];
Nmsmtp1.connect;
If flag=true then begin Nmsmtp1.sendmail;
nmsmtp1.disconntent;end
pageproducer1.htmldoc.add
(‘< /body >< /html >’);
response.content:=pageproducer1.content;

end;

增加nmsmtp1的事件如下:
procedure TWebModule1.NMSMTP1Connect(Sender: TObject);
begin
pageproducer1.htmldoc.add
(’< p >已经和发送邮件服务器连接< /p >’);
end;

procedure TWebModule1.NMSMTP1Connection
Failed(Sender: TObject);
begin
flag:=false;
pageproducer1.htmldoc.add
(’< p >连接失败< /P >’);
end;

procedure TWebModule1.NMSMTP1ConnectionRequired
(var Handled: Boolean);
begin
pageproducer1.htmldoc.add(’< p >要求进行连接< /p >’);
end;


procedure TWebModule1.NMSMTP1Failure(Sender: TObject);
begin
pageproducer1.htmldoc.add(’< p >发送邮件失败< /p >’);
flag:=false;
end;

procedure TWebModule1.NMSMTP1Header
Incomplete(var handled: Boolean;
hiType: Integer);
begin
pageproducer1.htmldoc.add(’< p >head不完整< /p >’);
flag:=false;
end;


procedure TWebModule1.NMSMTP1InvalidHost
(var Handled: Boolean);
begin
pageproducer1.htmldoc.add(’< p >
发送邮件服务器地址无效< /p >’);
flag:=false;
end;


procedure TWebModule1.NMSMTP1RecipientNot
Found(Recipient: String);
begin
pageproducer1.htmldoc.add
(’< p >接受邮件地址不正确< /p >’);
flag:=false;
end;


procedure TWebModule1.NMSMTP1Success(
Sender: TObject);
begin
pageproducer1.htmldoc.add(’< p >
成功发送邮件< /p >’);
end;
将project存为sendmail.dpr,编译后放到WEB服务器的可执行文件路径下(如:c:intpubscripts),即可响应HTML文件dl.htm的用户输入,并且如果用户的用户名及密码正确则可进入发送邮件的页面,用户填写接受邮件地址及主题、内容后即可发送邮件。此程序在NT SERVER上调试通过。
 
我这几天都上不来大富翁,多谢几位高手的指点,

我前几天专门请Soul给我培训了两个小时,

甚是有用。我先试试再说,如没有问题,

我就发分了
 
你怎么计算网络流量啊?
 
我们专门有一套软件来记录流量的。不是我们公司作的。
我只是读出数据
 
后退
顶部