如何利用dcom实现三层结构?

csut_deng 2002-03-11 11:45:39
数据库:oracle
前台:visual c++
大家知道,进行数据库开发,一般除了在服务器端安装oracle服务器版外,还必须在客户端安装oracle客户端,现在我想用DCOM编程,实现三层结构(如delphi的三层结构), 这样,对于每个客户端来讲,就不需要再配置oracle客户端,就可以直接用程序了,但究竟该如何实现呢,各位有没有什么相关的资料或方法呢,麻烦帮帮我!
...全文
54 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
csut_deng 2002-03-12
  • 打赏
  • 举报
回复
结贴了,不知道令狐叶有没有拿到100分呢,如果没有,请告诉我(csut_deng@263.net),我再加给你
csut_deng 2002-03-12
  • 打赏
  • 举报
回复
谢谢linghuye(令狐叶) 的帮忙,有什么问题以后再找你请教,谢谢!
linghuye 2002-03-12
  • 打赏
  • 举报
回复
我没发现这本书的电子档, MSDN索引DCOM->architecture..., MSDN搜索"dcom bank" ,-> Cariplo: Distributed Component Object Model是一个银行的例子.(你需要拷贝MSDN光盘中的 PERIOD**.CHM).

至于SOAP,全名Simple Object Access Protocol.

DCOM并不象Microsoft和书本上鼓吹得那样具有位置透明性(it's nonsense), 实际上如果你要在广域网(如Internet上)甚至只是在跨域时发布你的DCOM,这时安全性是个非常棘手的问题.
因为DCOM竟TMD敢私自打开一个端口进行通信,这时一个可爱的防火墙就足以使你的自以为是的DCOM崩溃.
而且DCOM的安全机制是令人吐血地严格的,在跨域访问时,你就是把所有的访问限制去除,还是会被拒绝访问,这涉及域间的信任问题, 要解决这些问题,你需要熟悉各种各样的安全机制.
所以DON BOX他老人家教导我们使用SOAP.SOAP使用HTTP的端口来进行通信, 使用XML纯文本来进行信息交互, 具有跨平台运行,日夜防渗防漏的优点, 质量好,量又足,我一直用它.它实际上在COM组件间建立起一个间接的HTTP通信,避开安全检查.

需要XML,COM,HTTP的一些知识,MSDN->Periodicals->2000->MSDN Magazine->March->A Young Person's Guide to The Simple Object Access Protocol.
至于具体详细的技术就不是这里能说的了的,Sorry.
chinaysc 2002-03-11
  • 打赏
  • 举报
回复
用Com组件实现客户端
Com组件可以放在Com服务器上
应用程序不需要知道Oracle数据库位置名称
Oracle客户在Com服务器实现
csut_deng 2002-03-11
  • 打赏
  • 举报
回复
请各位帮忙!
csut_deng 2002-03-11
  • 打赏
  • 举报
回复
请各位帮忙!
csut_deng 2002-03-11
  • 打赏
  • 举报
回复
另外,关于在msdn中有相关的资料,请问怎么找呢?
还有你提到的使用SOAP来实现,又是怎么一回事呢?
麻烦介绍一下,谢谢,分数不够我可以再加!
csut_deng 2002-03-11
  • 打赏
  • 举报
回复
《Visual C++ DCOM 开发指南》这本书书店没有卖,我现在是在网上书店买的,但可能要一个多星期才能到货,因比较急,请问linghuye(令狐叶) 是否有这本书的电子档呢或知道哪里有电子档下载呢?或者再把问题讲详细一点,因为关于这方面的资料实在是太少了,谢谢!
linghuye 2002-03-11
  • 打赏
  • 举报
回复
Easy.
使用ADO数据技术.

编写服务器端数据处理COM组件,将其配置成DCOM服务.

在客户端编写客户程序,向DCOM服务器组件要求获取,修改数据.
直接传送SQL语句,让服务端执行.要传回的数据直接从_RecordsetPtr无连接传回,
如:
STDMETHODIMP CDataServer::FetchRecordsetData(BSTR bstrQuerySQL, IDispatch **pResultRecordSet)
{
if(m_pMainConnection == NULL)
return E_POINTER;

try
{
_RecordsetPtr pRecordset;
pRecordset.CreateInstance (__uuidof(Recordset));
pRecordset->Open (bstrQuerySQL, (IDispatch*)m_pMainConnection, adOpenStatic, adLockOptimistic, adCmdText);
pRecordset->putref_ActiveConnection (NULL);
*pResultRecordSet = (IDispatch*)pRecordset.Detach ();
}
catch(_com_error e)
{
return e.Error ();
}

return S_OK;
//OK
}

编码很简单,但DCOM的配置相当复杂,特别是跨域时涉及安全性问题.
也可以使用SOAP技术来实现三层结构, it's interesting!
《Visual C++ DCOM 开发指南》有讲解,MSDN中的System Journal中有文章和开发实例.

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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