Asp.net動態調用WebService


Public Class WebServiceHelper

#Region "InvokeWebService"
    '動態調用web服務
    Public Shared Function InvokeWebService(ByVal url As String, ByVal methodname As String, ByVal args As Object()) As Object
        Return WebServiceHelper.InvokeWebService(url, Nothing, methodname, args)
    End Function

    Public Shared Function InvokeWebService(ByVal url As String, ByVal classname As String, ByVal methodname As String, ByVal args As Object()) As Object
        Dim [namespace] As String = "EnterpriseServerBase.WebService.DynamicWebCalling"
        If (classname Is Nothing) OrElse (classname = "") Then
            classname = WebServiceHelper.GetWsClassName(url.ToLower.Replace("?wsdl", ""))
        End If

        Try
            If url.ToLower.IndexOf("?wsdl") = -1 Then
                url &= "?wsdl"
            End If

            '獲取WSDL
            Dim wc As New WebClient()
            Dim stream As Stream = wc.OpenRead(url)
            Dim sd As ServiceDescription = ServiceDescription.Read(stream)
            Dim sdi As New ServiceDescriptionImporter()
            sdi.AddServiceDescription(sd, "", "")
            Dim cn As New CodeNamespace([namespace])

            '生成客戶端代理類代碼
            Dim ccu As New CodeCompileUnit()
            ccu.Namespaces.Add(cn)
            sdi.Import(cn, ccu)

            '設定編譯參數
            Dim cplist As New CompilerParameters()
            cplist.GenerateExecutable = False
            cplist.GenerateInMemory = True
            cplist.ReferencedAssemblies.Add("System.dll")
            cplist.ReferencedAssemblies.Add("System.XML.dll")
            cplist.ReferencedAssemblies.Add("System.Web.Services.dll")
            cplist.ReferencedAssemblies.Add("System.Data.dll")

            '編譯代理類
            Dim vbc As New VBCodeProvider
            Dim cr As CompilerResults = vbc.CompileAssemblyFromDom(cplist, ccu)
            If True = cr.Errors.HasErrors Then
                Dim sb As New System.Text.StringBuilder()
                For Each ce As System.CodeDom.Compiler.CompilerError In cr.Errors
                    sb.Append(ce.ToString())
                    sb.Append(System.Environment.NewLine)
                Next
                Throw New Exception(sb.ToString())
            End If

            '生成代理實例,並調用方法
            Dim assembly As System.Reflection.Assembly = cr.CompiledAssembly
            Dim t As Type = assembly.[GetType]([namespace] & "." & classname, True, True)
            Dim obj As Object = Activator.CreateInstance(t)
            Dim mi As System.Reflection.MethodInfo = t.GetMethod(methodname)

            Return mi.Invoke(obj, args)
        Catch ex As Exception
            Throw New Exception(ex.InnerException.Message, New Exception(ex.InnerException.StackTrace))
        End Try
    End Function
#End Region

    Private Shared Function GetWsClassName(ByVal wsUrl As String) As String
        Dim parts As String() = wsUrl.Split("/"c)
        Dim pps As String() = parts(parts.Length - 1).Split("."c)

        Return pps(0)
    End Function
End Class

調用方法:

    Public Function SyncResume(ByVal ResumeID As Integer) As String
        Dim sResult As String = ""

        Dim url As String = "http://www.webservicex.net/globalweather.asmx"
        Dim args As Object() = New Object() {"beijing","China"}

        sResult = WebServiceHelper.InvokeWebService(url, "GetWeather", args)

        Return sResult
    End Function

 

引用自:

動態調用WebService(C#) (非常實用)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM