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#) (非常实用)

转载于:https://www.cnblogs.com/icycore/p/3623059.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值