VB call Web Service

It's easy to call web service in C# code, but how about it for VB code?  The following code will show you how to call web service in VB code.

 

Microsoft XML, v6.0 must be added in reference in this post.

 

Below codes show one method to call web service:

 

****************Web Service*********************

    [WebMethod]
    public XmlDataDocument getLoadIDInfo3(string strSHPDAT)
    {
        Recordset rs = new Recordset();
        Connection cn = new Connection();
        Stream st = new Stream();
        XmlDataDocument xd = new XmlDataDocument();
        string strSQL = "SELECT * FROM LOAT WHERE SHPDAT='" + strSHPDAT + "'";
        String myConnString = "Provider=SQLOLEDB.1;User ID=xxx;password=xxxxx;Initial Catalog=DB name;Data Source=172.20.xxx.xxx";
        cn.Open(myConnString, "", "", 0);
        rs.ActiveConnection = cn;
        rs.Open(strSQL, cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockReadOnly, 0);
        rs.Save(st, PersistFormatEnum.adPersistXML);
        st.Flush();
        st.Position = 0;
        xd.LoadXml(st.ReadText(st.Size));

        rs.Close();
        cn.Close();
        return xd;
    }

&&&&&&&&&&&&&&  VB6.0 call Web service  &&&&&&&&&&&&&&&&&

        Dim oHTTP As XMLHTTP
        Dim oXmlDoc As DOMDocument
        Dim rs As New ADODB.Recordset
        Dim strURL As String, strRequest As String

        strURL = "http://localhost:22090/ws/Service.asmx/getLoadIDInfo3"
        strRequest = "strSHPDAT=20101105"
        Set oHTTP = New XMLHTTP
        oHTTP.Open "POST", strURL, False
        oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        oHTTP.send (strRequest)
        
        Set oXmlDoc = New DOMDocument
        oXmlDoc.Load oHTTP.responseXML
        rs.Open oXmlDoc
        While Not rs.EOF
            MsgBox rs("LOADID") & "    " & rs("SHPDAT") & "    " & rs("LOADQT") & "    " & rs("TRKMAS")
            rs.MoveNext
        Wend


 

Below codes show another method to call web service:

 

&&&&&&&&&&&&&&  VB6.0 call Web service  &&&&&&&&&&&&&&&&&

Private Sub Form_Load()
        Dim oHTTP As XMLHTTP
        Dim oXmlDoc As DOMDocument
        Dim rs As New ADODB.Recordset
        Dim soapMessage, soapData, URL
        Dim strShipment As String
        strShipment = "218|2010950940"
        ' Set the soap message
        soapMessage = "<?xml version=""1.0"" encoding=""utf-8""?>"
        soapMessage = soapMessage & "<soap:Envelope xmlns:xsi=""
http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"
        soapMessage = soapMessage & "<soap:Body>"
        ' Set the data for soap body ---- begin ------
        soapData = "<Call_ForVB xmlns=""SAP.SD.Z_RFC_SEND_SHIPMENT_VB_ES"">"
        soapData = soapData & " <strClientAndShipment>" & strShipment & "</strClientAndShipment>"
        soapData = soapData & "</Call_ForVB>"
        ' Set the data for soap body ----  end  ------
        soapMessage = soapMessage & soapData & "</soap:Body>"
        soapMessage = soapMessage & "</soap:Envelope>"
        URL = "
http://10.243.9.16/SOA/SD/wsRFC_SEND_SHIPMENT_VB_ES.asmx" '可以使用相对地址或完整URL
'        URL = "
http://10.243.9.16/SOA/SD/wsRFC_SEND_SHIPMENT_VB_ES.asmx?op=Call_ForVB"
        Set oHTTP = CreateObject("Microsoft.XMLHTTP")
        oHTTP.Open "POST", URL, False
       
        oHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
        oHTTP.setRequestHeader "Content-Length:", Len(soapMessage)
        oHTTP.setRequestHeader "SOAPAction", "SAP.SD.Z_RFC_SEND_SHIPMENT_VB_ES/Call_ForVB"
        oHTTP.send (soapMessage)
        Set oXmlDoc = New DOMDocument
        oXmlDoc.Load oHTTP.responseXML
        rs.Open oXmlDoc
        While Not rs.EOF
            MsgBox rs("Tknum") & "    " & rs("Matnr") & "    " & rs("Kdmat") & "    " & rs("Erdat") & "    " & rs("Lfimg")
            rs.MoveNext
        Wend
        '那么如何知道是否调用成功呢,状态为200说明调用成功,500则说明出错
        MsgBox (oHTTP.Status)
        MsgBox (oHTTP.statusText)

        Unload Me
End Sub

 

****************Web Service*********************

 

    [WebMethod]
    public XmlDataDocument Z_RFC_SEND_SHIPMENT_VB_ES_For_VB(string strClientAndShipment)
    {
        XmlDataDocument xd = new XmlDataDocument();
        xd.CreateXmlDeclaration("1.0", "UTF-8", String.Empty);
        Recordset rs = new Recordset();
        Stream st = new Stream();
        DataSet dsReturn = new DataSet(); //dsreturn for Return DataSet
        wsSAPProxy objSap = new wsSAPProxy();
        objSap.Connection = new SAPConnection(GetSAPProxy(strClientAndShipment.Split('|')[0])); 
        ZJOWTable wsZJOW = new ZJOWTable();
        objSap.Z_Rfc_Send_Shipment_Vb_Es(strClientAndShipment.Split('|')[1], ref wsZJOW);

        DataTable dtReturn = new DataTable();
        dtReturn = wsZJOW.ToADODataTable();
        rs = ConvertToRecordset(dtReturn);
        rs.Save(st, PersistFormatEnum.adPersistXML);
        st.Flush();
        st.Position = 0;
        xd.LoadXml(st.ReadText(st.Size));
        return xd;
    }
    private string GetSAPProxy(string strCLIENT)
    {

        string strReturnSAPProxy = "";
        InitRemoting.SetSqlClient();
        obj = InitRemoting.objSqlClient;

        try
        {
            strReturnSAPProxy = obj.GetSAPConnString(strCLIENT);
        }

        catch
        {
            SAPAccess objSAPAccess = null;
            objSAPAccess = new SAPAccess(strCLIENT, @"SapConfig.xml");
            objSAPAccess.ErrorFlag = 0;

            ArrayList aryConnectionString = objSAPAccess.ConnectionString;
            strReturnSAPProxy = aryConnectionString[0].ToString();
        }

        return strReturnSAPProxy;
    }
    static public ADODB.Recordset ConvertToRecordset(DataTable inTable)
    {
        ADODB.Recordset result = new ADODB.Recordset();
        result.CursorLocation = ADODB.CursorLocationEnum.adUseClient;

        ADODB.Fields resultFields = result.Fields;
        System.Data.DataColumnCollection inColumns = inTable.Columns;

        foreach (DataColumn inColumn in inColumns)
        {
            resultFields.Append(inColumn.ColumnName
                , TranslateType(inColumn.DataType)
                , inColumn.MaxLength
                , inColumn.AllowDBNull ? ADODB.FieldAttributeEnum.adFldIsNullable :
                                         ADODB.FieldAttributeEnum.adFldUnspecified
                , null);
        }

        result.Open(System.Reflection.Missing.Value
                , System.Reflection.Missing.Value
                , ADODB.CursorTypeEnum.adOpenStatic
                , ADODB.LockTypeEnum.adLockOptimistic, 0);

        foreach (DataRow dr in inTable.Rows)
        {
            result.AddNew(System.Reflection.Missing.Value,
                          System.Reflection.Missing.Value);

            for (int columnIndex = 0; columnIndex < inColumns.Count; columnIndex++)
            {
                string str = dr[columnIndex].ToString();
                string str1 = str.Replace("/"", "").Replace(",", "").Replace("−", "_").Replace("'", "").Replace("#", "").Replace("/","");
                resultFields[columnIndex].Value = str1;
            }
        }

        return result;
    }
    static ADODB.DataTypeEnum TranslateType(Type columnType)
    {
        switch (columnType.UnderlyingSystemType.ToString())
        {
            case "System.Boolean":
                return ADODB.DataTypeEnum.adBoolean;

            case "System.Byte":
                return ADODB.DataTypeEnum.adUnsignedTinyInt;

            case "System.Char":
                return ADODB.DataTypeEnum.adChar;

            case "System.DateTime":
                return ADODB.DataTypeEnum.adDate;

            case "System.Decimal":
                return ADODB.DataTypeEnum.adCurrency;

            case "System.Double":
                return ADODB.DataTypeEnum.adDouble;

            case "System.Int16":
                return ADODB.DataTypeEnum.adSmallInt;

            case "System.Int32":
                return ADODB.DataTypeEnum.adInteger;

            case "System.Int64":
                return ADODB.DataTypeEnum.adBigInt;

            case "System.SByte":
                return ADODB.DataTypeEnum.adTinyInt;

            case "System.Single":
                return ADODB.DataTypeEnum.adSingle;

            case "System.UInt16":
                return ADODB.DataTypeEnum.adUnsignedSmallInt;

            case "System.UInt32":
                return ADODB.DataTypeEnum.adUnsignedInt;

            case "System.UInt64":
                return ADODB.DataTypeEnum.adUnsignedBigInt;

            case "System.String":
            default:
                return ADODB.DataTypeEnum.adVarChar;
        }
    }

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值