首页 / 知识
关于c#:使用反射来调用ASP.NET Web服务
2023-04-15 07:54:00

Using reflection to call an ASP.NET web service假设我有一个ASMX Web服务MyService。 该服务具有方法MyMethod。 我可以在服务器端执行MyMethod,如下所示:
我需要执行类似的操作,直到运行时才知道服务和方法。 我假设反思是解决问题的方法。 不幸的是,我很难使它工作。 当我执行此代码时:
它引发此错误:
任何指导将不胜感激。 //试试这个->
我不确定这是否是解决问题的最佳方法。对我而言,最明显的方法是发出HTTP请求,然后使用实际的HTTP GET或POST调用Web服务。使用您的方法,我不确定要如何设置要发送到Web服务的数据。我在VB.Net中添加了一些示例代码
这是一个简短的答案,有人可能会对此进行扩展。 当您使用WSDL模板应用程序(WSDL.exe)生成服务包装器时,它将构建一个类型为SoapHttpClientProtocol的类。您也可以手动进行操作:
我尚未测试此代码,但我想它可以独立运行而无需运行WSDL工具。 我提供的代码是通过远程调用连接到Web服务的调用者代码(即使出于某种原因,您实际上并不希望它是远程的。)Invoke方法负责将其打包为肥皂电话。如果您想通过HTTP绕过Web服务调用,则@Dave Ward的代码是正确的-只要您实际上能够引用该类即可。也许内部类型不是" MyService"-您必须检查控件的代码才能
尽管我不知道反射为什么不在那里起作用(我假设编译器可能正在根据您的 简而言之,使您的WebService简单,简短:Facade Pattern的实现。 使您的服务将计算委托给实现类,该实现类应易于通过反射调用。这样,您的WebService类就只是系统的前端-您甚至可以添加电子邮件处理程序,XML-RPC前端等,因为您的逻辑不是耦合到WebService,而是耦合到实际的业务层对象。 将WebService类视为体系结构中的UI层对象。 我回头看了这个问题,我认为您所面临的是,ASMX代码将以随机名称内置到DLL中,作为站点动态编译的一部分。默认情况下,用于查找类型的代码将仅搜索其自己的程序集(根据收到的错误的外观,为另一个App_Code DLL)和核心库。您可以为GetType()提供一个特定的程序集引用" TypeName,AssemblyName",但对于自动生成的程序集则是不可能的,因为在每次重新编译后都有新名称。 解决方案...。我自己以前没有做过,但是我相信您应该可以使用以下方法:
因为BuildManager知道它已经创建的DLL,并且知道在哪里查找。 我想这确实与Web服务无关,但是如果它是您自己的代码,那么Daren对Facade模式是正确的。 @Radu:我能够创建一个实例并完全像这样调用该方法。例如,如果我有此ASMX:
我可以从ASPX页面的代码中调用它,如下所示:
您是说不行吗? 尽管我无法从您的帖子中得知: 要记住的一件事是,如果使用反射,则需要创建自动生成的Web服务类的实例(该实例是从Web服务的WSDL创建的)。不要创建对服务的服务器端负责的类。 因此,如果您有网络服务
您不能在客户端中引用该程序集,而是执行以下操作:
@Kibbee:我需要避免HTTP性能下降。这不会是远程呼叫,因此所有这些额外的开销都应该是不必要的。 @Daren:我绝对同意那种设计理念。这里的问题是,我不会控制该服务或其底层业务逻辑。 这是针对服务器控件的,它需要针对任意服务/方法执行,与Web服务本身的实现方式正交。 |
最新内容
相关内容
linux远程执行多命令?
linux远程执行多命令?,工具,服务,命令,状态,暂停,代码,底部,时间,地址,系统,Linux多台主机批量执行命令1、执行命令(记得先对doCommand.s h增加浏览器调用linux命令?
浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,服务,求助大神,如何通过网页使用python向linux系统发送一些命令执py调用linux的命令?
py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,linux执行python脚本1、先将终端所在路径切换到python脚本文件的目linux命令行执行工具?
linux命令行执行工具?,工具,系统,网络,分析,工作,服务,状态,信息,电脑,发行,shell编程(掌握Linux命令行工具)1、在开始Shell编程之前,我们需要linux执行命令后无号?
linux执行命令后无号?,系统,环境,信息,工具,状态,数据,命令,文件,字符集,环境变量,在linux命令行中执行sql查询出现乱码用Linux命令“source ~linux服务器基本命令?
linux服务器基本命令?,地址,系统,设备,网络,工作,标准,信息,电脑,命令,密码,linux如何查看ip地址命令(linux如何查看ip地址)1、目录方法1:使用Ulinux系统命令调用?
linux系统命令调用?,系统,单位,工具,工作,管理,地址,权威,密码,电脑,信息,怎么把linux系统的命令行打开在Linux系统中,打开命令行窗口需要使用linux服务器下载命令?
linux服务器下载命令?,服务,密码,系统,档案,工具,网络,公共,百度,地址,认证,linux下lftp连接ftp服务器上传下载命令连接ftp服务器 格式:ftp [holinux周期执行命令?
linux周期执行命令?,工作,系统,周期,地址,命令,工具,信息,时间,任务,目录,linux命令行下怎么定时执行一个命令?1、编辑定时执行计划。这个方式linux执行命令大全?
linux执行命令大全?,工作,系统,地址,信息,命令,目录,工具,基础,设备,发行,Linux文件系统操作命令1、cat:可以显示文件的内容(经常和more搭配使循环执行linux命令?
循环执行linux命令?,工具,系统,名称,代码,第一,环境,位置,数字,脚本,变量,Linux的shell脚本for循环怎么调用位置变量1、linux shell中的变量一linux服务端退出命令?
linux服务端退出命令?,档案,命令,环境,异常,标准,网络,模式,终端,编辑,文件,linux的telnet退出命令1、Telnet测试一般使用的是TelnetIP(主机)