用C#写的webserivce,返回一个dataset,在VB或者c 中怎么调用?
日期:2006-06-01 15:27:04 点击:0 评论:0
用C#写webserivce,返回一个dataset,而在VB或者C 中没有dataset这个东西,该怎么做才能在VB或者c 中调用c#写的webserivce?
主题:请问在vb6中怎样调用web service
我已经安装好了soap toolkit,怎样在vb中把soap控件加进去呢?以便调用web service
Webservice中的GetTemperature方法:
Dim soap As MSSOAPLib.SoapClient
Set soap = New MSSOAPLib.SoapClient
soap.mssoapinit _
"http://localhost/Temperature/Temperature.wsdl"
MsgBox ("气温是: " & _
soap.GetTemperature("20171", False))
上面的MSSOAPLib怎么加进去的?
谢谢了
我写了一个Web Service方法:
GetEmployee(byval employeeNo as string) as Employee
我在客户端和服务端Employee类的定义如下
Public Class
Public EmployeeNo as String
Public EmployeeName as String
End Class
我现在要在vb6.0客户端使用soap调用他
Set soapClient3 = New MSSOAPLib30.SoapClient30
On Error GoTo ErrorHandler
soapClient3.MSSoapInit2 App.Path & "/EmployeeService.wsdl", _
"", _
"EmployeeService", _
"EmployeeServiceSoap", _
"http://tempuri.org/"
If Err.Number <> 0 Then
MsgBox "initialization failed " + Err.Description
End If
dim employee as new Employee
employee=soapClient3.GetEmployee("123")
系统总是提示错误:object doesn't support this property or method.
但是我使用Call soapClient3.GetEmployee("123")系统正常。
在VB中测试
这个就要相对来说复杂一些
首先在vb中建立一个”标准EXE”的工程。添加引用:Microsoft Soap Type library。注意:如果没有安装Microsoft Soap Toolkit,是没有这个类型库的。
可以在http://www.ourfly.com中下载。
添加一个text
Private Sub Form_Load()
Text1.Text = add()
End Sub
Public Function Add() As String
Dim objSoapClient As New SoapClient
objSoapClient.ClientProperty("ServerHTTPRequest") = True
Call objSoapClient.mssoapinit("http://localhost/webserver/service1.asmx?WSDL", "Service1", "Service1Soap")
这句也可以
objSoapClient.mssoapinit("http://localhost/webserver/service1.asmx?WSDL")
Add = objSoapClient.Show("龙卷风.NET")
End Function
-------------------
SONP Toolkit这里有下载:http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe
安装完成后在VB工程里引用Microsoft SOAP Type Library
下面是我已经调通的一个简单例子:
服务端:
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'Webservice 的概念是使用一个标准的输出接口来定义代码提供的功能,以便让外界可以通过这个标准的输出
'接口来调用,而所谓的标准输出接口就是wsdl,wsdl是一个xml组成的文件,描述了实现程序对外提供函数的
'原型,客户端可以通过wsdl来调用实现程序提供的服务代码。
'
'
'服务端代码如下:(在这个例子中服务端用java完成,客户端用VB6.0完成,服务器是tomcat5.0)
'
'首先建立服务端程序:
'启动JBuilder建立一个工程,设置服务器为tomcat4.0(因为JBuilder9不支持tomcat5.0,实现后将其在
'tomcat5.0中发布)。
'新建一个class 代码如下:
'public class HelloWorld{
' public String sayHello(){
' return "Hello world!";
' }
' public String echo(String u){
' return "Hello " + u;
' }
'}
'选择File菜单New,在弹出的对话框中选择web services页中的Web Serivice Configuation Wizard,新建
'webapp axis并配置servers。
'再次选择File菜单,New再出现的窗口中选择Export as a web service Wizard,在弹出的向导中选择要导出
'的类名,其它项直接选默认值即可。
'运行刚才建立的程序,出现"JBuilder Apache Axis Admin Console"的页面表示刚才建立的webservice成功。
'点击View超级链接进入"And now... Some Services"页面,点击HelloWorld(WSDL)的链接出现WSDL描述文件,
'至此webservice服务端建立完成。
'
'将刚才建立的webservice发布到tomcat5.0中,在tomcat的webapps目录下新建webservicetest目录,将用
'JBulider建立的工程目录下的 axis目录下的文件全部复制到其中,重新启动tomcat,
'访问http://localhost:8080/webservicetest/,如果看到"JBuilder Apache Axis Admin Console"页面
'说明发布成功。
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
客户端:
Private Sub Command1_Click()
Dim sc As SoapClient '调用SOAP客户端
Set sc = New SoapClient '进行实例化
On Error Resume Next '出错时转到下一条语句
sc.mssoapinit "http://192.168.1.6:8080/webserver/services/HelloWorld?wsdl"
If Err Then
MsgBox "SoapClient.mssoapinit failed. " & Err.Description, vbExclamation
Err.Clear
Exit Sub
End If
'Text1.Text = sc.sayHello()
Text1.Text = sc.echo(Text1.Text)
If Err Then
MsgBox "SoapClient.echo failed. " & Err.Description & vbCrLf & sc.faultstring & vbCrLf & sc.detail, vbExclamation
Err.Clear
Exit Sub
End If
End Sub
----------------
参考一下
//****服务器端*******
Service1.asmx里包含下面两个WEBMETHOD
[WebMethod]
public DataSet GetMyProductsDataSet(int userID)//被调用时将返回DATASET序列的XML,此XML主要用于ADO.NET
{
string sql;
DataSet ds2=new DataSet();
sql = "select userid,productname from StockIC where UserID="+userID;
my_adapter = new SqlDataAdapter(sql,this.sqlConnection1);
my_adapter.Fill(ds2,"Stock");
return ds2;
}
[WebMethod]
//被调用时将返回ADO.Recodset序列的XML
public System.Xml.XmlDocument GetMyProductsRecordSet(int userID),此XML主要用于ADO
{
string sql;
ADODB.Recordset rs=new ADODB.Recordset();
ADODB.Stream st=new ADODB.Stream();
System.Xml.XmlDocument xd=new System.Xml.XmlDocument();
sql = "select userid,productname from StockIC where UserID="+userID;
rs.Open(sql,this.sqlConnection3,ADODB.CursorTypeEnum.adOpenForwardOnly,ADODB.LockTypeEnum.adLockReadOnly, 1);
rs.Save(st,ADODB.PersistFormatEnum.adPersistXML);
st.Flush();
st.Position=0;
xd.LoadXml(st.ReadText(st.Size));
return xd;
}
'****客户端*******
'XMLHTTP调用并装载到ADO.RECORDSET分析(简单方便),可以直接由XMLDOM来分析
Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP.4.0")
Set objXmlDoc =Server.CreateObject("MSXML2.DOMDocument.3.0")
strWebserviceURL = "http://192.168.1.88/Service1.asmx/GetMyProductsRecordSet"
strRequest = "userID=43"
objHTTP.Open "post", strWebserviceURL, False
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send(strRequest)
objXmlDoc.load objHTTP.responseXML
set rs=server.CreateObject("adodb.recordset")
rs.Open objXmlDoc'必须是ADO.Recodset序列的XML,如果上面http://192.168.1.88/Service1.asmx调用的方法GetMyProductsRecordSet改成GetMyProductsDataSet将报错
if rs is nothing then response.Write "rsisnothing"
if rs.EOF then
response.Write "rs.EOF"
else
while not rs.EOF
response.Write rs(0) & " "
rs.MoveNext
wend
end if
set objXmlHttp=nothing
set objXmlDoc=nothing
set rs=nothing
---------------------
如果webservice不使用windows身份验证:
Dim objSoapClient As New SoapClient
objSoapClient.ClientProperty("ServerHTTPRequest") = True
bjSoapClient.mssoapinit "http://loacalhost/service1/service1.asmx?WSDL"
MsgBox objSoapClient.Function1("string1", "string2")
以上的代码可以顺利通过;但是如果webservice使用windows身份验证,我使用了一下代码:
Dim objSoapClient As New SoapClient
objSoapClient.ClientProperty("ServerHTTPRequest") = True
objSoapClient.ConnectorProperty("AuthName") = "Username"
objSoapClient.ConnectorProperty("AuthPassword") = Password"
bjSoapClient.mssoapinit "http://loacalhost/service1/service1.asmx?WSDL"
MsgBox objSoapClient.Function1("string1", "string2")
不能通过,请高手赐教正确的方法 (帐号肯定正确,Micsoft soap type libaray已经引用!)
---------------
自己的问题自己解决,先下载wsdl
Dim objSoapClient As New SoapClient
objSoapClient.ClientProperty("ServerHTTPRequest") = True
objSoapClient.MSSoapInit "service1.WSDL"
objSoapClient.ConnectorProperty ("EndPointURL")="http://loacalhost/service1/service1.asmx?WSDL"
objSoapClient.ConnectorProperty("AuthName") = "Username"
objSoapClient.ConnectorProperty("AuthPassword") = Password"
MsgBox objSoapClient.Function1("string1", "string2")
-------------------
来源:网络收集 |