如何捕捉“操作员的用户名、IP、登录时间、主机名”,正确登录后在服务应用程序的Listview中显示它。(用DCOM)

解决方案 »

  1.   

    我刚刚做好了一个SocketConnection的元件,支持用户名检测连接,支持传送数据压缩,不过只能通过Socket,因为,我修改了Delphi的那个Socket连接的服务器端程序,修改了SocketConnection。我可以做到显示连接的用户名称,来源IP地址,或者主机名称,登陆时间,请求的Com服务名称。如果通过DCOM连接,我研究了很久发现无法获得来源的IP地址信息,因为连接对于Com来说是透明的,或者我需要换个思路,比如提供DCOM的私有列集就可以做到了,我做到了通过Socket连接的列集,但是我做不到DCOM的列集。RPC我不熟悉。如果让用户自己报告他的情况,就有点太不专业了,呵呵,显然存在欺骗程序的问题。你需要的话,可以问我要那个服务器端程序和SocketConnection的代码,不过这个是我为一个项目写的专用的服务器端和连接元件,你需要根据自己的需要修改一下。
      

  2.   

    to 蜗牛大佬,
    你的SocketConnection能否给我一份?小弟的箱子:[email protected],谢谢另外你说的列集是什么概念啊,看了半天没看懂
      

  3.   

    都已经发了,各位注意查收,列集,说简单一点,就是调用进程外Com服务器的时候,复制堆栈参数的过程,通常用默认的列集,通过Socket的列集Delphi是这样处理的,他同时在客户端和服务器端产生一个支持IDispatch接口的对象,两个对象的实现是不同的,他通过Winsock转发所有的Invok调用。可惜的是他不能支持QueryInterface调用,因此你不能在客户端申请服务器对象的其它接口,我想这是有原因的,因为它不能确定你申请的其他的接口是从IDispach继承的,这样就不能为你的新的接口进行列集,不过你可以使用事件接口的,需要扩展SockConnection,如果支持事件的话,你就可以把一个客户对数据库的更改向全部的用户进行广播,不过我想这种广播对于服务器的压力是空前巨大的,除非你把服务器端的业务逻辑弄得很细腻,这也是不太可能的。希望各位能够写出高质量的三层程序,让Delphi的三层思想发扬光大,最好能够形成一种标准,这样就好了,Delphi的同志们就不怕没有饭吃了。
      

  4.   

    收到了,谢谢,晚上看看
    还是没能看明白你的列集,是不是Marshalling的意思?
      

  5.   

    to 蜗牛大佬,你的SocketConnection能否也给俺发一份?小弟的箱子:[email protected],俺正也需要取 Client IP 的,谢谢先。
      

  6.   

    也给我一分吧[email protected]谢谢了