博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#动态调用WebService
阅读量:7222 次
发布时间:2019-06-29

本文共 3935 字,大约阅读时间需要 13 分钟。

WebServiceHelper代码:

using Microsoft.CSharp;using System;using System.CodeDom;using System.CodeDom.Compiler;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Reflection;using System.Text;using System.Web.Services.Description;using System.Xml.Serialization;namespace SunCreate.HaiKang8600WebService.Utils{    ///     /// 动态调用WebService    ///     public static class WebServiceHelper    {        ///         /// 动态调用WebService        ///         /// WebService地址        /// 命名空间        /// 类名        /// 方法名(模块名)        /// 参数列表        public static object InvokeWebService(string url, string strNamespace, string className, string methodName, object[] args)        {            try            {                WebClient webClient = new WebClient();                Stream stream = webClient.OpenRead(url); //获取服务描述语言(WSDL)                ServiceDescription serviceDescription = ServiceDescription.Read(stream); //通过直接从 Stream实例加载 XML 来初始化ServiceDescription类的实例。                ServiceDescriptionImporter serviceDescriptionImporter = new ServiceDescriptionImporter();                serviceDescriptionImporter.AddServiceDescription(serviceDescription, null, null);                //生成客户端代理类代码                CodeNamespace codeNamespace = new CodeNamespace(strNamespace);  //CodeNamespace表示命名空间声明。                CodeCompileUnit codeCompileUnit = new CodeCompileUnit();                codeCompileUnit.Namespaces.Add(codeNamespace);                serviceDescriptionImporter.Import(codeNamespace, codeCompileUnit);                CSharpCodeProvider csharpCodeProvider = new CSharpCodeProvider();                ICodeCompiler iCodeCompiler = csharpCodeProvider.CreateCompiler();//取得C#程式码编译器的执行个体                //设定编译器的参数                CompilerParameters compilerParameters = new CompilerParameters();//创建编译器的参数实例                compilerParameters.GenerateExecutable = false;                compilerParameters.GenerateInMemory = true;                compilerParameters.ReferencedAssemblies.Add("System.dll");                compilerParameters.ReferencedAssemblies.Add("System.XML.dll");                compilerParameters.ReferencedAssemblies.Add("System.Web.Services.dll");                compilerParameters.ReferencedAssemblies.Add("System.Data.dll");                //编译代理类                CompilerResults compilerResults = iCodeCompiler.CompileAssemblyFromDom(compilerParameters, codeCompileUnit);                if (true == compilerResults.Errors.HasErrors)                {                    StringBuilder sb = new StringBuilder();                    foreach (CompilerError ce in compilerResults.Errors)                    {                        sb.Append(ce.ToString());                        sb.Append(System.Environment.NewLine);                    }                    throw new Exception(sb.ToString());                }                //生成代理实例,并调用方法                System.Reflection.Assembly assembly = compilerResults.CompiledAssembly;                Type type = assembly.GetType(strNamespace + "." + className, true, true);                object obj = Activator.CreateInstance(type);                System.Reflection.MethodInfo methodInfo = type.GetMethod(methodName); //MethodInfo 的实例可以通过调用GetMethods或者Type对象或派生自Type的对象的GetMethod方法来获取,还可以通过调用表示泛型方法定义的 MethodInfo 的MakeGenericMethod方法来获取。                return methodInfo.Invoke(obj, args);            }            catch (Exception ex)            {                LogUtil.LogError(ex, "动态调用WebService 错误");                return null;            }        }    }}
View Code

 使用示例:

string url = "http://172.16.36.26:8080/attachment/services/AttachmentService?wsdl";object[] args = new object[2];args[0] = "1";args[1] = "1";object str = WebServiceHelper.InvokeWebService(url, "service.webservice", "AttachmentService", "checkGrade", args);string sstr = str.ToString();
View Code

 

转载于:https://www.cnblogs.com/s0611163/p/10096745.html

你可能感兴趣的文章
不要仅为85%的用户设计:关注无障碍设计
查看>>
特斯拉主动召回,有5.3万辆车刹住了之后就没法继续开走了
查看>>
于小镭:区块链将从三方面带来颠覆性认知革命
查看>>
SpaceX发射机密间谍卫星,系与美国防部签订的第一单合作
查看>>
亚马逊推出FreeTime Android应用程序,开放适合儿童资源
查看>>
Python1
查看>>
jquery.idTabs使用方法
查看>>
需求分析详细设计概要设计说明书部分样本
查看>>
数字货币交易系统火爆的背后是政策的大力支持
查看>>
gulp与webpack的区别
查看>>
ORA-12547:TNS:lost contact 问题分析思路
查看>>
解决firefox疯狂读硬盘的问题
查看>>
清华产业十大创新项目评选 新华三H3Cloud OS夺冠
查看>>
事务操作的统计,TPS的计算,隔离级别的读提交
查看>>
转贴:Ms Sql Server 2008 集成 SP1的方法!!!
查看>>
Memcache监控工具 -- memcache-top
查看>>
3-9 读写缓存流 ——BufferedStream类
查看>>
linux head
查看>>
Oracle osw监控工具的使用示例
查看>>
在Spring中整合JUnit单元测试
查看>>