一:利用CCW,从Com组件中调用.net组件,实现VB6中调用VB.net写的组件;
二:利用Web Service 在VB6和VB.net之间通讯;
本文讨论利用 Web Service 在VB6和VB.net之间通讯。
Web Service 、Soap简介
Web Service是通过HTTP执行远程方法调用的一种方法,其中的HTTP可以利用Soap(简单对象访问协议Simple Object Access Protocol)。在.net中,Web Service的开发变得更容易,客户端调用Web Service也很容易。如果不是通过.net调用 Web Service 会比较复杂。这时候,推荐使用Microsoft SOAP Toolkit ,它会让调用变得简单。
代码演示
下面演示使用 Web Service 完成加密、解密运算,然后客户端vb6程序通过Soap调用这个 Web Service 。这个演示版使用的Soap是:Microsoft SOAP Toolkit Version 3。可以在微软站点获得最新的Soap SDK。Microsoft SOAP Toolkit Version 3 SDK 下载地址如下:(http://www.microsoft.com/downloads/release.asp?releaseid=32832)。
Private ReadOnly arrDefaultDESKey As Byte()
Private ReadOnly arrDefaultDESIV As Byte()
Public Sub New()
MyBase.New()
'This call is required by the Web Services Designer.
InitializeComponent()
'Add your own initialization code after the InitializeComponent() call
arrDefaultDESKey = New Byte() {42, 16, 93, 156, 78, 4, 218, 32}
arrDefaultDESIV = New Byte() {55, 103, 246, 79, 36, 99, 167, 3}
End Sub
<WebMethod()> _
Public Function DecodeString(ByVal strtemp As String) As String
Return DESDecode(UrlEncrypt(strtemp, False), arrDefaultDESKey, arrDefaultDESIV)
End Function
<WebMethod()> _
Public Function EncodeString(ByVal strtemp As String) As String
Return UrlEncrypt(DESEncode(strtemp, arrDefaultDESKey, arrDefaultDESIV), True)
End Function
Private Function DESDecode(ByVal strtemp As String, ByVal m_DESKey As Byte(), ByVal m_DESIV As Byte()) As String
Dim objDES As DESCryptoServiceProvider
objDES = New DESCryptoServiceProvider
Dim arrInput As Byte()
arrInput = Convert.FromBase64String(strtemp)
Dim objMemoryStream As MemoryStream
objMemoryStream = New MemoryStream(arrInput)
Dim objCryptoStream As CryptoStream
objCryptoStream = New CryptoStream(objMemoryStream, objDES.CreateDecryptor(m_DESKey, m_DESIV), CryptoStreamMode.Read)
Dim objStreamReader As StreamReader
objStreamReader = New StreamReader(objCryptoStream)
Return objStreamReader.ReadToEnd()
End Function
Private Function DESEncode(ByVal strtemp As String, ByVal m_DESKey As Byte(), ByVal m_DESIV As Byte()) As String
Dim objDES As DESCryptoServiceProvider
objDES = New DESCryptoServiceProvider
Dim objMemoryStream As MemoryStream
objMemoryStream = New MemoryStream
Dim objCryptoStream As CryptoStream
objCryptoStream = New CryptoStream(objMemoryStream, objDES.CreateEncryptor(m_DESKey, m_DESIV), CryptoStreamMode.Write)
Dim objStreamWriter As StreamWriter
objStreamWriter = New StreamWriter(objCryptoStream)
objStreamWriter.Write(strtemp)
objStreamWriter.Flush()
objCryptoStream.FlushFinalBlock()
objMemoryStream.Flush()
Return Convert.ToBase64String(objMemoryStream.GetBuffer(), 0, objMemoryStream.Length())
End Function
'bSign true 加密 False 解密
' strTemp
Private Function UrlEncrypt(ByVal strTemp As String, ByVal bSign As Boolean) As String
If bSign Then
Return HttpUtility.UrlEncode(strTemp)
Else
Return HttpUtility.UrlDecode(strTemp)
End If
End Function
Private Sub Command1_Click()
Dim soapClient3
Set soapClient3 = CreateObject("MSSOAP.SoapClient30")
On Error Resume Next
Call soapClient3.MSSoapInit(WSURL, "", "")
If Err <> 0 Then
MsgBox Err.Description
End If
Text2.Text = soapClient3.EncodeString(Text1.Text)
If Err <> 0 Then
MsgBox Err.Description
End If
Set soapClient3 = Nothing
If Err <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Command2_Click()
Dim soapClient3
Set soapClient3 = CreateObject("MSSOAP.SoapClient30")
On Error Resume Next
Call soapClient3.MSSoapInit(WSURL, "", "")
If Err <> 0 Then
MsgBox Err.Description
End If
Text1.Text = soapClient3.DecodeString(Text2.Text)
If Err <> 0 Then
MsgBox Err.Description
End If
Set soapClient3 = Nothing
If Err <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Form_Load()
Text1.Text = "你好么,测试!"
End Sub
五、编译程序并执行。
源代码下载:下载
小结:
利用 Web Service 在VB6和VB.net之间通讯,这种方法对客户端环境的要求很低,而且核心代码被封装在服务器端,便于升级维护。推荐使用。
需下载msSoapToolkit20.exe
引用:MSSOAP.SoapClient
实例:
Dim soapclient as MSSOAP.SoapClient
Const WSDL_URL = "http://192.168.0.3/yundan/service1.wsdl"
set soapclient = Server.CreateObject("MSSOAP.SoapClient")
soapclient.ClientProperty("ServerHTTPRequest") = True
soapclient.mssoapinit
http://192.168.0.3:8080/yundan/Service1.WSDL","Service1","Service1Soap",""
Dim res as string
res = soapclient.test(23, 34)