您的位置:首页 > 编程语言 > ASP

Asp.net动态调用WebService

2014-03-25 14:26 393 查看
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#) (非常实用)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: