加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

动态调用Webservice

发布时间:2020-12-17 02:57:19 所属栏目:安全 来源:网络整理
导读:???????? /// summary ???????? /// 根据指定的信息,调用远程 WebService 方法 ???????? /// /summary ???????? /// param name="url" WebService 的 http 形式的地址 /param ???????? /// param name="namespace" 欲调用的 WebService 的命名空间 /param ?

???????? /// <summary>

???????? /// 根据指定的信息,调用远程WebService方法

???????? /// </summary>

???????? /// <param name="url">WebServicehttp形式的地址</param>

???????? /// <param name="namespace">欲调用的WebService的命名空间</param>

???????? /// <param name="classname">欲调用的WebService的类名(不包括命名空间前缀)</param>

???????? /// <param name="methodname">欲调用的WebService的方法名</param>

???????? /// <param name="args">参数列表</param>

???????? /// <returns>WebService的执行结果</returns>

???????? /// <remarks>

???????? /// 如果调用失败,将会抛出Exception。请调用的时候,适当截获异常。

???????? /// 异常信息可能会发生在两个地方:

???????? /// 1、动态构造WebService的时候,CompileAssembly失败。

???????? /// 2WebService本身执行失败。

???????? /// </remarks>

???????? /// <example>

???????? /// <code>

???????? /// object obj = InvokeWebservice("http://localhost/GSP_WorkflowWebservice/common.asmx","Genersoft.Platform.Service.Workflow","Common","GetToolType",new object[]{"1"});

???????? /// </code>

???????? /// </example>

???????? private object InvokeWebservice(string url,string @namespace,string classname,string methodname,object[] args)

???????? {

????????????? try

????????????? {

?????????????????? System.Net.WebClient wc = new System.Net.WebClient();

?????????????????? System.IO.Stream stream = wc.OpenRead(url+"?WSDL");

?????????????????? System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream);

?????????????????? System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter();

?????????????????? sdi.AddServiceDescription(sd,"","");

?????????????????? System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace);

?????????????????? System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();

?????????????????? ccu.Namespaces.Add(cn);

?????????????????? sdi.Import(cn,ccu);

?

?

?????????????????? Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider();

?????????????????? System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler();

?

?

?????????????????? System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.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");

?

?

?????????????????? System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist,ccu);

?????????????????? if(true == cr.Errors.HasErrors)

?????????????????? {

?????????????????????? System.Text.StringBuilder sb = new System.Text.StringBuilder();

?????????????????????? foreach(System.CodeDom.Compiler.CompilerError ce in cr.Errors)

?????????????????????? {

??????????????????????????? sb.Append(ce.ToString());

??????????????????????????? sb.Append(System.Environment.NewLine);

?????????????????????? }

?????????????????????? throw new Exception(sb.ToString());

?????????????????? }

?????????????????? System.Reflection.Assembly assembly = cr.CompiledAssembly;

?????????????????? Type t = assembly.GetType(@namespace+"."+classname,true,true);

?????????????????? object obj = Activator.CreateInstance(t);

?????????????????? System.Reflection.MethodInfo mi = t.GetMethod(methodname);

?????????????????? return mi.Invoke(obj,args);

????????????? }

????????????? catch(Exception ex)

????????????? {

?????????????????? throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));

????????????? }

???????? }

选择自 wenddy112 的 Blog

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读