`
invisableway
  • 浏览: 8124 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

动态引用Webservice

 
阅读更多

 

Imports System.Collections.Generic
Imports System.Text
Imports System.IO
Imports System.Configuration
Imports System.CodeDom
Imports System.CodeDom.Compiler
Imports System.Net
Imports System.Web.Services
Imports System.Web.Services.Description
Imports Microsoft.CSharp

	Public NotInheritable Class WebServiceHelper
		Private Sub New()
		End Sub

		''' <summary>  
		''' 动态调用WebService  
		''' </summary>  
		''' <param name="url">WebService地址</param>  
		''' <param name="methodname">方法名(模块名)</param>  
		''' <param name="args">参数列表</param>  
		''' <returns>object</returns>  
		Public Shared Function InvokeWebService(url As String, methodname As String, args As Object()) As Object
			Return InvokeWebService(url, Nothing, methodname, args)
		End Function

		''' <summary>  
		''' 动态调用WebService  
		''' </summary>  
		''' <param name="url">WebService地址</param>  
		''' <param name="classname">类名</param>  
		''' <param name="methodname">方法名(模块名)</param>  
		''' <param name="args">参数列表</param>  
		''' <returns>object</returns>  
		Public Shared Function InvokeWebService(url As String, classname As String, methodname As String, args As Object()) As Object

			Dim [namespace] As String = "ServiceBase.WebService.DynamicWebLoad"

			If classname Is Nothing OrElse classname = "" Then

				classname = WebServiceHelper.GetClassName(url)
			End If

			'获取服务描述语言(WSDL)  
			Dim wc As New WebClient()
			Dim stream As Stream = wc.OpenRead(url & "?WSDL")
			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 csc As New CSharpCodeProvider()
			Dim icc As ICodeCompiler = csc.CreateCompiler()
			'设定编译器的参数  
			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 cr As CompilerResults = icc.CompileAssemblyFromDom(cplist, ccu)
			If True = cr.Errors.HasErrors Then
				Dim sb As System.Text.StringBuilder = New StringBuilder()
				For Each ce As 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)
		End Function

		Private Shared Function GetClassName(url As String) As String
			Dim parts As String() = url.Split("/"C)
			Dim pps As String() = parts(parts.Length - 1).Split("."C)
			Return pps(0)
		End Function
	End Class

 

 

分享到:
评论

相关推荐

    动态引用WebService

    动态引用WebService是一种在C#编程中不通过添加服务引用而是直接在运行时生成并使用Web服务客户端代理的方式。这种方式在客户端事先不知道Web服务的具体信息或者需要动态调用多个不同Web服务时非常有用。以下是详细...

    动态引用webservice(网页版)

    在本场景中,我们关注的是“动态引用Web服务”,尤其是网页版的应用。动态引用Web服务意味着在运行时,程序会根据需要加载和使用Web服务,而不是在编译时硬编码服务的引用。这种方式提供了更大的灵活性,特别是对于...

    .Net动态调用WebService

    在.NET框架中,动态调用WebService是一项常见的任务,它允许开发者在运行时根据需要与Web服务进行交互,而无需在编译时明确指定服务接口。这通常涉及到使用System.Web.Services.ProtocolsSoapHttpClientProtocol类...

    完整的动态引用WebService(VC,VB)

    一段完整的远程调用Web Service代码,含VC和VC双重解析,是编程人员的好帮手。

    解析及动态调用Webservice程序

    动态调用Webservice是指在运行时根据需要创建并执行Web服务的方法,无需预先编译或硬编码调用的详细信息。这种灵活性允许开发者在不完全了解服务接口的情况下使用服务,只需知道服务的URL和WSDL(Web服务描述语言)...

    C#_.NET_动态调用webservice的三种方式

    在动态调用WebService时,我们需要引用以下四个名称空间: * System.Web.Services.Description * System.CodeDom * Microsoft.CSharp * System.CodeDom.Compiler 重要的类 在动态调用WebService时,我们需要使用...

    asp.net 动态调用WebService

    通常,我们会使用`AddWebReference`或`AddServiceReference`工具在项目中添加对WebService的引用,这会自动生成一个客户端代理类,用于与WebService交互。然而,如果我们想要动态更改WebService的URL,就不能依赖于...

    C#.NET_动态调用webservice的三种方式

    ### C#.NET 动态调用WebService的三种方式详解 #### 概述 在日常的.NET开发工作中,我们经常需要与远程服务器上的服务进行交互,其中WebService作为一种常见的服务交互方式被广泛采用。多数情况下,我们会选择通过...

    springboot动态调用webservice接口

    最近项目中遇到需要去掉老系统的webservice服务中的insert方法,找了很久,发现这样最简单,实测有效!!!

    C#动态webservice调用接口

    C#动态webservice调用接口 using System; using System.Collections; using System.IO; using System.Net; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Hishop.Plugins { //...

    webservice的动态调用和静态调用

    这种方式无需预先添加服务引用,可以在运行时动态获取服务的元数据,更加灵活。例如,使用System.ServiceModel.Channels.Binding和System.ServiceModel.ChannelFactory可以创建一个到WebService的通道,并进行调用:...

    C#动态调用webservice

    描述中提到的“搭建iis网站,通过webservice动态指定网址”,意味着我们将创建一个IIS站点,并在这个站点上发布我们的WebService。IIS是微软提供的一款强大的Web服务器,它可以托管各种Web应用程序,包括WebService...

    在WinForm程序中调用WebService

    7. **在WinForm中引用WebService**: - 在WinForm项目中,右键点击"引用",选择"添加服务引用",输入WebService的URL,然后生成对应的客户端代理类。这将在项目中生成一个`.wsdl`文件和一个配置文件`web.config`的...

    动态调取webservice返回json数据并处理

    这里我们关注的是动态调用WebService并处理返回的JSON数据,然后将这些数据展示在GridView中。这个过程涉及到的技术主要包括:WebService的调用、JSON数据解析以及数据绑定到GridView。 首先,让我们来理解...

    动态调用webservice与复杂对象的序列化

    2. 循环引用:如果对象图中存在循环引用,序列化器可能陷入无限循环,需要特别处理。 3. 自定义序列化和反序列化逻辑:对于特殊类型的对象,可能需要提供自定义的序列化和反序列化逻辑。 4. 错误处理:在处理序列化...

    动态调用webService实例

    通过映射实现动态调用webService,写个url,方法名就直接调用,不需要在添加引用了,好处大家都明白 不过映射的方法(类里面)虽然能用 但是是过时的。 在vs2008下打开此工程可以看到提示的 大家有兴趣自己改吧 反正也...

    引用webservice实例,添加页面功能

    在“引用WebService实例”这个过程中,开发者通常会经历以下步骤: 1. **发现服务**:在本例中,文件名“uddi”可能指的是UDDI(Universal Description, Discovery, and Integration),这是一个目录服务,用于注册...

    vs2010引用webservice 详细步骤

    VS2010 引用 Web 服务详细步骤 VS2010 是微软公司推出的集成开发环境(Integrated Development Environment,IDE),它提供了许多强大的功能来帮助开发者快速构建和维护软件应用程序。在实际开发中,我们经常需要...

    C#动态调用WebService.pdf

    在C#编程中,动态调用WebService是一种常见的需求,它允许程序在运行时根据需要创建并调用WebService接口,而无需预先编译固定的引用。这种方式提高了程序的灵活性,特别是在服务地址或接口可能发生变化的情况下。 ...

    动态调用webservice的模块(c#)

    在.NET框架中,C#语言提供了强大的功能来动态调用Web服务,这使得开发者无需在设计阶段就引入具体的Web服务引用,而是可以在运行时根据需求动态地进行调用。这样的灵活性对于那些需要处理多变或者未知Web服务接口的...

Global site tag (gtag.js) - Google Analytics