有没有人对WebSnap 做B/S感兴趣的?

BCBPLC 2008-12-04 08:59:16
有没有人对WebSnap 做B/S感兴趣的?
最近在用webSnap做B/S网页,困难不少,但也积累了一些经验,
要与感兴趣的网友一起探讨,有问题的也可以留言,一起解决
...全文
175 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BCBPLC 2009-01-15
  • 打赏
  • 举报
回复
这篇文章很快被人抄走了~
BCBPLC 2008-12-04
  • 打赏
  • 举报
回复
WebSnap常见问题FAQ
------------------------------------


WebSnap使用中问题较多,影响了它的推广使用,把本人使用过程中遇到的常见问题收集这里.

[一] DLL发布问题,我自己写了个websnap的dll放到iis 5.0上使用,可出现了下面的出错信息,请问如何解决?
Object factory for class TWebResponseWrapper missing !
答:在google搜到这这篇短文,可解决这个发布问题:
------------------------------------------------------------------------------------
Why do I get the error "Object factory for class TWebResponseWrapper missing"?
From Deploy.txt (that comes with Delphi 6, I took the liberty of correcting the spelling):
... you must register both WebBrokerScript.tlb
and stdvcl40.dll on the web server. TLB files cannot be
registered with the Microsoft regsvr32 program, but must
be registered with tregsvr, located in the Delphi bin
directory. You can copy tregsvr to the web server, and
register the files with:
tregsvr WebBrokerScript.tlb
and
tregsvr stdvcl40.dll
no found stdvcl40.dll , found stdvcl40.tlb to stead
----------------------------------------------------------------------------------
很简单,把delphi或bcb的tregsvr.exe和stdvcl40.tlb和 WebBrokerScript.tlb
复制到IIS服务器的windows系统目录中,并执行注册:
tregsvr WebBrokerScript.tlb
tregsvr stdvcl40.dll
可写成批命令,以后,就可用WebSnap技术发布你的.dll,做动态性的网页了

[二] 商业性质的网站空间会提供WebSnap技术服务吗?
一般的服务网站为了服务器系统的安全,只会提供脚本技术的服务,如ASP,PHP,JAVA等,根本不会提供ISAPI或CGI/EXE
的技术服务,因为一旦用户上传了.DLL或.EXE,就能很简单地用程序控制整个网络服务器,这是商家绝对不允许的。所以,
WebSnap的ISAPI技术适合用于自已单位或自已个人网站上。


[三] 我想在一个页处理中,不同的情况下显示不同的网页内容,可PageProducer的属性HTMLFile修改为何无效?
答:的确有这个问题,它总是用它缺省的HTML文件。生成WebSnap Module页时,不要选Standrad,用Blank,

如果选Stanard,将固定选用unitx .html作为显示 HTML文件,如果已经选了Stamdard,可将
Unitx.cpp已设定的参数改一下:
//-----------------------------------------------------------------------------------------------------------------------------------
#include "Unit1.h"
#include <WebInit.h>
#include <WebReq.hpp>
#include <WebCntxt.hpp>
#include <WebFact.hpp>

USEADDITIONALFILES("*.html");
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TPageProducerPage1 *PageProducerPage1()
{
return (TPageProducerPage1*)WebContext()->FindModuleClass(__classid (TPageProducerPage1));
}

static TWebPageAccess PageAccess;
static TWebAppPageInit WebInit(__classid(TPageProducerPage1), caCache, PageAccess << wpPublished /* << wpLoginRequired */, ".html", "", "", "", "");

将末行的串”.html”,改成空串””即可。

[四] WebSnap的数据库元件放到什么地方?实例怎么处理?
答:每一个页Module,就是从TwebAppPageModule和TdataModule1派生的,
可以直接放数据库元件,实例不需自已new,如果N个页Module要共用元件,就要手动新建
一个WebSnap DataModule做容器,实例不需自已new,它已定义了一个子程序供你取得这个容
器的实例指针,就在这个Unit中 :
TWebDataModule1 *WebDataModule1() // 取它的实例
{
return (TWebDataModule1*)WebContext()->FindModuleClass(__classid (TWebDataModule1));
}
你只要这样调用就可以取到了:
DataModule1=WebDataModule1();
中间变量DataModule1可以是局部变量或属性变量:TWebDataModule1 * DataModule1;
DataModule1->ADOConnection1->Close();
DataModule1-> ADOConnection1->ConnectionString=
"Provider=SQLOLEDB.1"
";Persist Security Info=True"
";Data Source="+DbPath+
";User ID="+DbUser+
";Password="+DbPsw+
";Initial Catalog="+dbf;
页模块间互访对象时,同样不能直接访问,可能实例并未产生,websnap已替你考虑好,每一页
页模块里都替你定义好一个静态子程序,调用方式WebDataModule名(),返回实例指针,你不用
自已建立或删除实例。

[五] .DLL被IIS5.1网页装载后,WebSnap源程序没法再修改编译了,怎么办?
答:与Windows XP的IIS5.1设定有关,

选项:缓存ISAPI应用程序(C),如果勾上,就会出现所提的问题,取掉勾子就不会这样,但WebSnap的Session就无法传递成功,如果不调试Session
可以暂时去掉此选项,但调试Session时,不得不勾上,出现问题时需简单的重启一下IIS5.1的服务进程就可以了:
找到控制面板的“服务”—>IIS Admin



[六] 跟以前老版的WebBroker 相比,做了哪 些改动,原来的对象属性仍能使用吗?Session怎么用?
答:以前的版本仍保留在,而WebSnap改动较大,更复杂了但功能增强,如果不想升级太大搞得复杂,
仍可借用以前的概念编程,复杂的暂时不用。以前的WebBroker没有Session功能,难以做“已登录”和持
续保留变量的一类问题,不得不借助于Cookie,现在简单了:在主页模块上只要放一个TsessionService,就可对
Session操作,客户端用IE访问服务端网页时,就自动产生一个SessionID(特殊Session变量),是一个唯一的
串,与此IE页相关的访问都是同一个SessionID,如果程序确认用户登录成功,可以再增一个Session变量标志
(例如取同名的SessionID,不要搞混),
Session->Values["SessionID"]=Session->SessionID;
一旦发现它的Session->SessionID与变量Session->Values["SessionID"]就可认定是同一个用户;
在页模件的网页中可以这样显示
显示SessionID <% =Session.SessionID.value %>
显示Session变量 <%=Session.Value(‘变量’) %>
以前版的一些对象位置,在每一个页模块的属性中:
PageModule1->Request; // TStrings *gv=this->Request->QueryFields; // Get变量
// TStrings *pv=this->Request->ContentFields; // Post变量
PageModule1->Response;
新增的 PageModule1->Session;
以前每一个DLL/Path入口功能在同一模块中,多时会模块非常复杂,现在按页模块分开了,简化了程序的
复杂,/Path就是页模块的名称了;
新增的最主要功能又是最复杂的就是Adapter功能,变量的访问可以直接嵌入在HTML中,如果暂不用此技术的话,
可以仍用以前的<#标记>的办法(标志不能用汉字),在PageProducer->OnHTMLTag()中替换:
void __fastcall PageProducer1::PageProducerHTMLTag(TObject *Sender, TTag Tag,
const AnsiString TagString, TStrings *TagParams,
AnsiString &ReplaceText)
{ // html标志
if (TagString=="Tag1")
ReplaceText=Tag1;
Else
If (TagString=="Tag2")
ReplaceText=Tag2;
else
If (TagString=="Tag3")
……….
}
变量Tag1….在PageProducer1的属性进行定义,已提前把值送好,就可把HTML的标志全部替换掉;
用标志的办法还可以邦助你调试程序,显示中间变量,如在网页中加<#TS>标志,在程序中就可把要显示的变量送入TS
中显示出来。

[七] 用了WebSnap做网页技术后,网页中的图片为何显示不出?
WebSnap的最终程序将是xxx.dll形式,各个模块页的入口是: xxx.dll/页模块名,
页模块名是以路径的形式放在URL中,这样造成当前路径与实际路径不一致,如果图片文件是以相对目录用于html中,
就出现问题了,如访问:http://127.0.0.1/websnap/xxx.dll/page1 时当前目录已为 /websnap/xxx.dll/(其实是错误),而不是
实际的 /websnap/ .。如果不想在URL中用绝对路径代替相对路径,用转义符%2F代替/轻松解决问题,因为符号/在URL表示
路径又进入一层,而websnap中的URL参数/infopath仅仅让.DLL知道要进入不同的入口,同一符号的含义明显不一样,用
转义符%2F代替/后,URL当前目录没未变化,而dll又得到了入口页模块名,类似的特殊情况都可考虑用转义符,转义符的格
式是 %再加ASCII码的两位16进字符。

luxuewei5214 2008-12-04
  • 打赏
  • 举报
回复
用intraweb不是更方便
yinxd6112 2008-12-04
  • 打赏
  • 举报
回复
bs还是不用delphi折腾了
sanguomi 2008-12-04
  • 打赏
  • 举报
回复
没兴趣,我现在都是学ASP.NET来做

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧