请问如何使用VBA调用WebService,十万火急!!谢谢

PerfectCK 2005-10-05 07:19:37
如题,搜过CSDN,VB社区里有两个帖子是说如何用VB调用的,照着做了做,可是不行……
...全文
687 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
online 2005-10-06
  • 打赏
  • 举报
回复
我的webservice返回的是一个DataSet,我在VBA里面得到后,有什么办法转换成RecordSet呢??



http://www.gbnis.com/read_file.php?id=2069&left=net_programe

参考一下

//****服务器端*******
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) & "<br/>"
rs.MoveNext
wend
end if
set objXmlHttp=nothing
set objXmlDoc=nothing
set rs=nothing
PerfectCK 2005-10-06
  • 打赏
  • 举报
回复
为什么我运行到这句就出错??
rs.Open(sql,sqlConnection3,ADODB.CursorTypeEnum.adOpenForwardOnly,ADODB.LockTypeEnum.adLockReadOnly, 1);
出现的是 HTTP 500 - 内部服务器错误
PerfectCK 2005-10-06
  • 打赏
  • 举报
回复
万分感谢~~~我去试试,有问题在请教阿~~呵呵
PerfectCK 2005-10-06
  • 打赏
  • 举报
回复
那个 sqlConnection3 是什么?怎么写的…………
PerfectCK 2005-10-05
  • 打赏
  • 举报
回复
基本搞定,顺便在问一个问题,呵呵。
我的webservice返回的是一个DataSet,我在VBA里面得到后,有什么办法转换成RecordSet呢??

呵呵~~~~~~~谢谢online(龙卷风V3.0--笑傲江湖) 老大~~~~~~~~~~~
online 2005-10-05
  • 打赏
  • 举报
回复
可以用http或者soap来调用
我的例子中都有了

可是我还是想知道老兄你那个方法怎么用????

我先吃饭去了
online 2005-10-05
  • 打赏
  • 举报
回复
以前写的例子
http://www.aspxboy.com/410/archive.aspx

注意这里
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")
PerfectCK 2005-10-05
  • 打赏
  • 举报
回复
我用soap可以调用了,这么写的
Dim srv As MSSOAPLib.SoapClient

Set srv = New MSSOAPLib.SoapClient

srv.mssoapinit "http://localhost/VBATest/Service1.asmx?WSDL"

MsgBox srv.HelloWorld("ewrew"

可是我还是想知道老兄你那个方法怎么用……嗬嗬嗬嗬
online 2005-10-05
  • 打赏
  • 举报
回复
没有区别
写一个简单的,返回一个字符串的方法,然后vb中调用
SoapClient30就可以了
估计你的代码有问题
PerfectCK 2005-10-05
  • 打赏
  • 举报
回复
.net的跟java的有区别吗!?我的怎么还有问题,能给我一个在.net的webservice上调通的吗?
万分感谢……
online 2005-10-05
  • 打赏
  • 举报
回复
vb的,已经测试
http://community.csdn.net/Expert/topic/4254/4254901.xml?temp=.3975946

2,464

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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