项目开发失败了!!!由此而引出的技术和管理上的种种问题。希望各位发表一些看法、意见。强烈请求有COM/DCOM/COM+开发经验的大哥(特别

nanhui 2003-05-15 03:05:39
注:
1、文中的部分是由于涉及到我们的机密,所以不能做完整表述,请多多包涵!!!谢谢
2、本文的防火墙由两方面组成:服务器是硬件防火墙(默认只开放80端口,还可以另行开放一段端口),客户端通过代理上网并可能有防火墙
  
  首先简单地介绍我们的系统吧!我们的项目是一个“...调度管理系统”,分为“...调度”和“用户管理”两大部分,两大部分的联系由DCOM实现。“用户管理”部分采用DCOM+Midas实现,“...调度”又分为“底层实现”和“用户界面”两部分,两边的联系还是使用DCOM方式。

  现在出现的问题是:
1、“用户管理”部分的问题是:穿越防火墙有些问题以及安全问题
2、“调度”部分的问题很严重、致命:由于中间件需要向“用户界面”主动发出消息即回调,这在一般的情况下是可以实现的,但在下面这种情况下是行不通的:“把服务器(中间件)放在有固定IP地址的公网上,客户端(用户界面)放在局域网内部通过代理上网,然后服务器需向客户端主动发起回调”。
3、当然这里也有穿越防火墙有些问题以及安全方面的问题。

  经过一个晚上的讨论和沉思这次失败最大个教训如下:
1、在定方案的时候技术选择错误(采用DCOM方式来实现回调)。
2、由始至终缺少一个对COM/DCOM有比较彻底认识的人才,要是我们有个像Raptor(猛禽) 大哥这样的,我们也不会一步步走入这条不归路。
3、技术人员对业务的无知,可以这样说:在一开始我们的技术人员对业务一无所知,即使是开发到现在我们还有部分技术人员对我们所涉及的业务一知半解。

  其实在整个开发的过程中也是我们对COM/DCOM一步步深入认识的过程,特别是我在一开始对COM/DCOM几乎是一无所知(其它三人比好一些,我负责的是“用户管理”部分和中间件的一部分)。用我们经理的一句话我们是一步步走进一个陷井,用我们自己的话是当我们的般快到对岸的时候,才发现般已经进入了一个漩涡,天啊!!!想当初我们还认为前景是多么的光明。

  现在对各位针对下面的问题畅所欲言:
1、DCOM在Internet对局域网的回调如何解决(其实这个问题已经基本无能为力了)
2、DCOM如何才能穿越防火墙。MIDAS穿越防火墙的能力如何?
3、安全问题。正如Raptor(猛禽)大哥所说的:“将DCOM放到INTERNET上本身就很不安全”。那么这个安全问题具体体现在哪里?又如何解决呢?
4、项目管理问题。可能在一开始的时候我们选择DCOM就是一个错。如何才能避免我们所碰到的失败
5、技术人员对业务的了解需要有多深?
6、我们有回头的余地吗?我们的准备是:除了回调改用SOCKET实现之外,其它部分还是采用DCOM方式,这条路能否行得通??。一个系统一块采用DCOM+Midas,另一块采用Socket是不是很怪,很别扭啊
7、如果采用COM+,能有多大的改进,比如采用消息订阅(关于回调)

如果大家觉得400分不够我会再加贴子
希望大家多参与,顶一下、关心一下也有分
...全文
96 58 打赏 收藏 转发到动态 举报
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenguohui 2003-06-02
  • 打赏
  • 举报
回复
都是高手,说的东西我都不懂,惭愧。。学习。。
IceAir 2003-05-28
  • 打赏
  • 举报
回复
有红星星的人果然就是不同,佩服!!!学习一堂好课。
wangxiangsjz 2003-05-28
  • 打赏
  • 举报
回复
学习ing
he_rong 2003-05-28
  • 打赏
  • 举报
回复
佩服 “Raptor(猛禽) ”兄,很想学习COM/DCOM方面的知识,看“COM本质论”一头雾水!不知道你那里有没有入门方面的资料,希望在不耽误的时间的情况给小弟指指路!如果有的话可以发到我信箱:he_rong@21cn.com,谢谢先!
piaohu 2003-05-27
  • 打赏
  • 举报
回复
DCOM+Midas 在Internet/intranet下是肯定行不通的,比如防火墙、保持心跳、回调
如果改用SocketConnnection+Midas 则只要开通部分端口便可以穿越防火墙了
至于回调在目前恐怕只能采用Socket了

当然如果WebConnection、SOAP应该也是比较好的选择
猛禽 2003-05-17
  • 打赏
  • 举报
回复
TO:nanhui(晖)
用HTTP Proxy就只能用HTTP协议的方式,如WebConnection/SOAP等
用网关要看情况,如果是路由型的网关(即每个内部IP都可以映射为一个外部IP)那和直接连的INTERNET上一样,但如果用NAT的,就还是不能直接连,但这种情况可以用SocketConnection

DCOM用的一是种RPC的改进,称为ORPC,是一种对等协议,跟一般网络协议的C/S协议不同,所以它没有用固定的端口
xiaojianw 2003-05-16
  • 打赏
  • 举报
回复
学习!
猛禽 2003-05-16
  • 打赏
  • 举报
回复
niuzhenjun(还得学呀) 兄说得有理,目前做Internet上的分布式应用,WebService算是最好的解决方案,不过针对楼主的应用来说,改动太大。
如果只能通过80端口的话,DCOM可以通过WebConnection来代理
whitetiger8 2003-05-16
  • 打赏
  • 举报
回复
关注一下。系统分析不好做啊
梦回童年001 2003-05-16
  • 打赏
  • 举报
回复
楼主
先别结先。
asimpleman 2003-05-16
  • 打赏
  • 举报
回复
go
bluedodo 2003-05-16
  • 打赏
  • 举报
回复
向各位大哥学习!
niuzhenjun 2003-05-16
  • 打赏
  • 举报
回复
Raptor(猛禽) 果然不愧为斑竹,分析的比较透澈。
对于在internet网上需要透过防火墙的项目,dcom是不行的,因为它的访问端口是不固定的,所以只留下80端口而封掉其他端口不能用dcom;既然是80端口,只能是http访问,即走tcp/ip协议,纵观目前的项目构架技术,webservice应该是首选:它只需要80端口即可,而且可以跨平台,现在有.net,c++,bcb等几乎所有流行语言都可以实现;dcom可以用到webservice服务之后的对数据库的局域网的访问,COM+实现事务;
以上只是个人观念,我正在进行过类似项目开发,webservice用.net实现,客户端用bcb或.net asp及vb实现都可以。
猛禽 2003-05-16
  • 打赏
  • 举报
回复
再补充一点关于yesry() 兄的问题:

你说的方法其实和回调没有本质的区别的,回调的实现原理就是在客户端实现一个IEventSink接口,通过服务端的IConnectionPoint接口保存,由服务端的IConnectionPointContainer管理,当服务端要回调时就是通过IConnectionPointContainer取得客户端的IEventSink接口进行远程调用的。这不就是你所说的:“客户端安装COM由服务器调用”嘛。:)

TO楼主:
没有什么技术可以放上神坛的,技术就是技术,是为应用服务的,没什么技术是十全十美的,就像没有包治百病的药(有也是FLG:)),重要的是根据实际应用的需要进行权衡。
DCOM是否没有“心跳”就会断开我不知道,不过SocketConnection是有一个超时设置,默认是无穷大,我一般的做法是将它设置为半小时,然后客户在每不到半小时就调用服务端一个方法,保持“心跳”。
sncel 2003-05-16
  • 打赏
  • 举报
回复
nanhui(晖)
我劝你们还是自己写个Apply Server吧,脱离DCOM,MIDAS。(ClientSocket/ServerSocket)自动断开是可以自己控制的。
GLIETMS 2003-05-16
  • 打赏
  • 举报
回复
关注中间件(软总线)。
sncel 2003-05-16
  • 打赏
  • 举报
回复
Raptor(猛禽) 兄回答的有几点疑问。

MIDAS是开发技术,不是实现技术,目前MIDAS主要是基于COM技术实现的,所以基本上COM的问题MIDAS都有,不过BORLAND提供了SocketConnection/WebConnection来做DCOM的代理,解决了部分问题,比如安全,代理等。

疑问: 内网机子通过服务器(防火墙只开一种协议的端口)的Socks4、Socks5、Http(有时可能要加安全认证)连接公网中的Apply Server,SocketConnection 和 WebConnection能通过这些协议连接到目标服务器吗?

SocketConnection是为了摆脱DCOM安全认证机制所提供的一种技术,只能点对点连接。但不能解决代理连接的问题。

WebConnection我是怎么试也连不通。

nobill 2003-05-16
  • 打赏
  • 举报
回复
关注!
nanhui 2003-05-16
  • 打赏
  • 举报
回复
说实在的,经历这一次之后,COM在我的心目中已经走下神坛了
也可能是我们用错了地方了吧
回到这个问题来吧
经过这一天下来,我们所做的实验,如果我们只把回调部分改为SOCKET的话(采用ClientSocket/ServerSocket)还是有问题的,因为DCOM的服务器与客户端无法保持常连接,按照一些说法是:如果6分钟两边没有“心跳”的话连接就会自动断开。
我不知道如果采用SocketConnection效果会如何??
还有:有谁能给我介绍一下SocketConnection的用途及用法。
谢谢
kataboy 2003-05-16
  • 打赏
  • 举报
回复
我来看热闹的。
加载更多回复(38)

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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