当前位置:编程学习 > C#/ASP.NET >>

两个号400分求解决VB调用WebService

我要用VB 调用WebService
WSDL为:Service.wsdl   (http://www.infozr.com/zhongran/Service.asmx?WSDL)
服务访问地址:http://www.infozr.com/zhongran/Service.asmx。这个服务的所有方法访问都需要一个SOAP头身份验证,其类名为:AuthHeader,它提供两个公共访问字段,分别是Username和Password,在调用时请给它们赋值:Zhongran和Zhongran
该服务提供三个方法:
1.BarCode(参数1,参数2)---参数1:18位条形码,参数2:11位的诚信通号码
2. FangWei (参数1,参数2)---参数1:20位防伪码,参数2:11位的诚信通号码
3. KaoHe (参数1,参数2,参数3)---参数1:员工工号(7),参数2:考核内容编码(3),参数3:11位的诚信通号码

目前该服务还没有连接Oracle数据库,只提供测试用,统一返回值0或E,如果具有访问权限返回0,没有则返回E。(只要Username和Password正确,方法的参数正确与否无所谓)


我用的是SoapToolkit20.rar

以下为我自己写的代码:


Private Sub Command1_Click()
On Error GoTo ErrorHandler
    Dim serial As SoapSerializer
    Dim reader As SoapReader
    Dim conn As SoapConnector
    
    Dim dom As DOMDocument30
    Dim nodelist As IXMLDOMNodeList
    Dim node As IXMLDOMNode
                    
    Set conn = New HttpConnector
    conn.Property("EndPointURL") = "http://www.infozr.com/zhongran/Service.asmx"
    conn.Property("SoapAction") = "BarCode"
    conn.Property("SoapAction") = "http://www.infozr.com.cn/BarCode"

    conn.BeginMessage
    Set serial = New SoapSerializer
    serial.Init conn.InputStream
    With serial
                .startEnvelope
                    .SoapNamespace "xsi", "http://www.w3.org/2001/XMLSchema-instance"
                    .SoapNamespace "xsd", "http://www.w3.org/2001/XMLSchema"
                    .startHeader
                        .startHeaderElement "AuthHeader ", "http://www.infozr.com.cn"
                            .writeXML "<Username>Zhongran</Username>"
                            .writeXML "<Password>Zhongran</Password>"
                        .endHeaderElement
                    .endHeader
                    .startBody
                        .startElement "BarCode", "http://www.infozr.com.cn"
                                .writeXML "<queryValue>afdafds5846846584f</queryValue>"             
                                .writeXML "<qengXT_Number>46dfdasf159</qengXT_Number>"           '这两个值可以随便输吧?
                            .endElement
                    .endBody
                .endEnvelope
    End With
    conn.EndMessage
    
    Set reader = New SoapReader
    reader.Load conn.OutputStream
    Dim str As String
    If Not reader.Fault Is Nothing Then
        MsgBox reader.faultstring.Text, vbExclamation
    Else
        str = reader.dom.xml
    End If
    Set dom = New DOMDocument30
    dom.setProperty "SelectionLanguage", "XPath"
    dom.loadXML str

    Set nodelist = dom.getElementsByTagName("BarCodeResult")
    Set node = nodelist(0)
    MsgBox CStr(node.firstChild.Text)
    Exit Sub
    
ErrorHandler:
    MsgBox "Error"
    Err.Clear
    Exit Sub
End Sub

我是个新手,第一次写关于WebService, 对XML也不熟悉, 这是我从昨天开始在网上看了一天的资料以后仿照别人写的代码写出来的 现在已经能调用BarCode方法了
但返回值总是“E” 我高了一天多了,实在不知道什么地方错了 (是最后写出来的soap包有问题?)不知道有没有什么方法能够查看我发出去的soap包? --------------------编程问答-------------------- 昨天在VB区贴了两个帖子 到现在一个回的人都没有 所以今天在这边再发两张贴 每张100分 解答的人麻烦跑下下面这几个链接 解决以后一起解帖
http://community.csdn.net/Expert/topic/5293/5293720.xml?temp=.6966974  (VB区)
http://community.csdn.net/Expert/topic/5293/5293607.xml?temp=3.196353E-02(VB区)
http://community.csdn.net/Expert/topic/5295/5295324.xml?temp=.9179651  (ASP。NET区) --------------------编程问答-------------------- 回家吃饭睡觉了 从前天晚上开始到现在睡了不到12个小时  55555555~~
明天一早来看贴 --------------------编程问答-------------------- 没有看出什么问题,是不是提供服务的给你的是测试链接啊?都返回相同的结果了 --------------------编程问答-------------------- DIM SoapClient as new SoapClient30
    call SoapClient.init("http://www.infozr.com/zhongran/Service.asmx?WSDL","AuthHeader")
    soapclient.Username="Zhongran"
    soapclient.Password="Zhongran"
    '开始调用方法
    call soapclient.BarCode(参数1,参数2)
    call soapclient.FangWei(参数1,参数2)
    call soapclient.KaoHe(参数1,参数2,参数3)
'不知道和你的那种调用有什么不同,本人也是刚学,请高人指点下 --------------------编程问答-------------------- 不知道和你的那种调用有什么不同,本人也是刚学,请高人指点下
——————————————————————————————————————————
本来在客户端程序中添加“web引用”引用那么wsdl就好。楼主偏不这样,楼主不借助vs开发工具,自己搞定。 --------------------编程问答-------------------- 确实是你代码的问题
下面是soap kit3但写法

Private Sub Command1_Click()
On Error GoTo ErrorHandler
Dim serial As MSSOAPLib30.SoapSerializer30
Dim reader As MSSOAPLib30.SoapReader30
Dim conn As MSSOAPLib30.ISoapConnector

Dim dom As DOMDocument30
Dim nodelist As IXMLDOMNodeList
Dim node As IXMLDOMNode

Set conn = New MSSOAPLib30.HttpConnector30


conn.Property("EndPointURL") = "http://www.infozr.com/zhongran/Service.asmx?WSDL"
conn.Connect
conn.Property("SoapAction") = "BarCode"
conn.Property("SoapAction") = "http://www.infozr.com.cn/BarCode"

conn.Property("AuthPassword") = "Zhongran"
conn.Property("AuthUser") = "Zhongran"


conn.BeginMessage
Set serial = New MSSOAPLib30.SoapSerializer30
serial.Init conn.InputStream
With serial
.startEnvelope
.SoapNamespace "xsi", "http://www.w3.org/2001/XMLSchema-instance"
.SoapNamespace "xsd", "http://www.w3.org/2001/XMLSchema"
.SoapNamespace "soap", "http://schemas.xmlsoap.org/soap/envelope/"

.startHeader

.startHeaderElement "AuthHeader ", "http://www.infozr.com.cn"
.StartElement "Username", "http://www.infozr.com.cn"
.WriteString "Zhongran"
.EndElement
.StartElement "Password", "http://www.infozr.com.cn"
.WriteString "Zhongran"
.EndElement
                   
.endHeaderElement
.endHeader
.startBody
.StartElement "BarCode", "http://www.infozr.com.cn"
  .writeXML "<queryValue>afdafds5846846584f</queryValue>"
  .writeXML "<qengXT_Number>46dfdasf159</qengXT_Number>"           '这两个值可以随便输吧?
.EndElement
.endBody
.endEnvelope
End With
conn.EndMessage

Set reader = New MSSOAPLib30.SoapReader30
reader.Load conn.OutputStream
Dim str As String
If Not reader.Fault Is Nothing Then
MsgBox reader.faultstring.Text, vbExclamation
Else
str = reader.dom.xml
End If
Set dom = New DOMDocument30
dom.setProperty "SelectionLanguage", "XPath"
dom.loadXML str

Set nodelist = dom.getElementsByTagName("BarCodeResult")
Set node = nodelist(0)
MsgBox CStr(node.firstChild.Text)
Exit Sub

ErrorHandler:
MsgBox "Error"
Err.Clear
Exit Sub

End Sub

--------------------编程问答-------------------- net_lover(【孟子E章】) 
能否介绍下,你的这种用法和

as new SoapClient30
然后init
再调用有什么区别呢? --------------------编程问答-------------------- 直接在VB中用代码实现对WEBSERVICE付出的成本代价太高了, 完全不值得.

用任何其他语言把这个WebService封装成一个COM对象,然后再交给VB调用要简单直接得多 --------------------编程问答-------------------- 用我的组件,有问题再联系我。

最简单的vb6访问Web服务(WSDL)的组件 
http://blog.csdn.net/modest/archive/2006/08/25/1118470.aspx
--------------------编程问答-------------------- up up --------------------编程问答-------------------- 根据 soap 的协议,调用非常简单!
一个 header + 几个参数
使用 xmlhttprequest 递交、接收、给 Dom 分析 xml --------------------编程问答-------------------- net_lover(【孟子E章】) 
运行结果怎么是
Method 'EndMessage' of object 'ISoapConnector' failed

有人成功吗? --------------------编程问答-------------------- SOAP头身份验证如果用apiaoz(心蓝) 的方法能做吗? --------------------编程问答-------------------- 在安装SOAP tool kit3.0下调试是正确的 --------------------编程问答-------------------- 搞的咋这么复杂呢
三个办法:
1.自己解析xml
2.ms soap
3.我的soap
补充:.NET技术 ,  Web Services
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,