如何用vb6.0采用xml-rpc联接访问后台web

前端之家收集整理的这篇文章主要介绍了如何用vb6.0采用xml-rpc联接访问后台web前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

有两年都没有搞vb6了,转做 PHP 和 python ,但一直很怀念那段时光,无法割舍他的简单与实用,由于项目关系,时常也会用上vb6,@H_301_1@

为此我也分享我应用的一些喜悦。@H_301_1@

xml-rpc(什么叫xml-rpc,在这里我就不作过多的专业说明,大家可以 baidu一下) 其实也是满有用的,也是简单、实用,在一些小项目上可以做出很优越的表现,vb6结合xml-rpc与后台web服务器联结,真的可以说是太完美了,刚好可以结合我现在的项目。@H_301_1@


@H_301_1@

言归正转,
@H_301_1@

需求分析:@H_301_1@

1.客户端之前是用vb6写的,现在需要访问外部网络数据(比如获取实时外汇汇率,等等),但是又不想开放外网访问权限给你的客户端
@H_301_1@

2.目前有一台 web 服务器为apache + PHP 或 python
@H_301_1@

3.因为之前vb6写的程序不想一下全部转为 网页(因为这是个大工程)@H_301_1@


@H_301_1@

解决方案:@H_301_1@

(一) PHP后台web服务语言的解决方案:(服务器安装,这里就不讲了)@H_301_1@

先下载 XML-RPC for PHP ,解压后放到你的服务器网页根目录下,用于后台 xml-rpc 服务,@H_301_1@

现在你应该可以在服务器上执行:http://localhost/xmlrpc/debugger/index.PHP@H_301_1@

Address: localhost,Path: /xmlrpc/demo/server/server.PHP,选择 list available methods,点 execute 后,应该可以看到如下图结果,则说明你xml-rpc 服务可以使用。
@H_301_1@


@H_301_1@

(二)python后台web服务语言的解决方案:
@H_301_1@

python 本身就支持 xml-rpc的,在这里我写一个简单的服务器例子:@H_301_1@

  1. from xmlrpc.server import SimpleXMLRPCServer
  2. from xmlrpc.server import SimpleXMLRPCRequestHandler
  3.  
  4. # Restrict to a particular path.
  5. class RequestHandler(SimpleXMLRPCRequestHandler):
  6. rpc_paths = ('/RPC2',)
  7.  
  8. # Create server
  9. server = SimpleXMLRPCServer(("localhost",8000),requestHandler=RequestHandler)
  10. server.register_introspection_functions()
  11.  
  12. # Register pow() function; this will use the value of
  13. # pow.__name__ as the name,which is just 'pow'.
  14. server.register_function(pow)
  15.  
  16. # Register a function under a different name
  17. def adder_function(x,y):
  18. return x + y
  19. server.register_function(adder_function,'add')
  20.  
  21. # Register an instance; all the methods of the instance are
  22. # published as XML-RPC methods (in this case,just 'mul').
  23. class MyFuncs:
  24. def mul(self,x,y):
  25. return x * y
  26.  
  27. server.register_instance(MyFuncs())
  28.  
  29. # Run the server's main loop
  30. server.serve_forever()

保存为rpc.py文件在服务端,双击执行ok@H_301_1@


@H_301_1@

(三) 现在讲 客户端 vb6 如何联接 web服务器@H_301_1@

1.)先下载 两个dll: vbXML.dll,vbXMLRPC.dll,分别为 xml-rpc 解析工具库,在这里有下载(还提供原代码哦)
@H_301_1@

http://www.enappsys.com/backend/vbXMLRPC/vbXMLRPCBinaries.jsp@H_301_1@

2.) 接着注册COM
@H_301_1@

regsvr32 /s vbXML.dll
@H_301_1@

regsvr32 /s vbXMLRPC.dll@H_301_1@

3.) 在vb6中引用,如下图@H_301_1@

4.)vb6 客户端代码如何写,如下图@H_301_1@

  1. Option Explicit
  2.  
  3. Private Sub Command_Click()
  4. Dim vRequest As New XMLRPCRequest
  5. Dim vResponse As XMLRPCResponse
  6. Dim vUtility As New XMLRPCUtility
  7. Me.MousePointer = vbHourglass
  8. Set vRequest = GetPYRpc("add")
  9. vRequest.Params.AddInteger Text1.Text
  10. vRequest.Params.AddInteger Text2.Text
  11.  
  12. 'Debug.Print vRequest.XMLToSend
  13. Set vResponse = vRequest.Submit
  14. Select Case vResponse.Status
  15. Case XMLRPC_PARAMSRETURNED
  16. If vResponse.Params.Count = 1 Then
  17. Debug.Print vResponse.HTTPHeaders
  18. Debug.Print vResponse.XMLResponse
  19. Text3.Text = vResponse.Params(1).IntegerValue
  20.  
  21. Else
  22. BugOut "Expecting one return parameter,received '" & vResponse.Params.Count & "'."
  23. End If
  24. Case XMLRPC_FAULTRETURNED
  25. BugOut "Server returned a fault. Code is '" & vResponse.Fault.FaultCode & "',description is '" & vResponse.Fault.FaultString & "'."
  26. Case XMLRPC_HTTPERROR
  27. BugOut "HTTP error encountered. Code is '" & vResponse.HTTPStatusCode & "',description is '" & vUtility.GetHTTPError(vResponse.HTTPStatusCode) & "'."
  28. Case XMLRPC_XMLPARSERERROR
  29. BugOut "XML Parsing Error encountered '" & vResponse.XMLParseError & "'."
  30. Case XMLRPC_NOTINITIALISED
  31. BugOut "Weird,the response claims not to be initialised !!!"
  32. Case Else
  33. BugOut "Double Weird,unknown response status '" & vResponse.Status & "'."
  34. End Select
  35. Me.MousePointer = vbDefault
  36. End Sub
  37.  
  38. Private Sub BugOut(ByVal vstrError As String)
  39. MsgBox vstrError,vbOKOnly + vbCritical,App.Title
  40. End Sub


  1. Option Explicit
  2.  
  3. Public Function GetPHPRpc(ByVal vMethod As String) As XMLRPCRequest
  4. Dim mReq As XMLRPCRequest
  5. Set mReq = New XMLRPCRequest
  6. mReq.ConnectTimeOut = 60
  7. mReq.ReceiveTimeOut = 60
  8. mReq.SendTimeOut = 60
  9. mReq.HostName = "localhost"
  10. mReq.HostPort = 80
  11. mReq.HostURI = "/xmlrpc/demo/server/server.PHP"
  12. mReq.MethodName = vMethod
  13. Set GetPHPRpc = mReq
  14. End Function
  15.  
  16.  
  17.  
  18. Public Function GetPYRpc(ByVal vMethod As String) As XMLRPCRequest
  19. Dim mReq As XMLRPCRequest
  20. Set mReq = New XMLRPCRequest
  21. mReq.ConnectTimeOut = 0
  22. mReq.ReceiveTimeOut = 0
  23. mReq.SendTimeOut = 120
  24. mReq.HostName = "localhost"
  25. mReq.HostPort = 8000
  26. mReq.HostURI = "/RPC2"
  27. mReq.MethodName = vMethod
  28. Set GetPYRpc = mReq
  29. End Function
  30.  

测试结果如下图:

@H_301_1@

猜你在找的VB相关文章