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
引用自: