设为首页 加入收藏

TOP

根据Webservice地址,动态传入参数(Webservice代理类)(一)
2019-09-17 18:34:39 】 浏览:37
Tags:根据 Webservice 地址 动态 传入 参数 代理

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Sunlib;

using System.Net;

using System.IO;

using System.Web.Services.Description;

using System.CodeDom;

using Microsoft.CSharp;

using System.CodeDom.Compiler;

using System.Reflection;

 

public class Webservice

{

  public static object InvokeWebService(string url , string methodName , object[] args)

  {

    string @namespace="client";

    StringBuilder sb = new StringBuilder();

    try

      {

         WebClient ws = new WebClient();

         Stream stream=ws.OpenRead(url+"?WSDL");

         ServiceDescription sd=ServiceDescription.Read(stream);

         string classname=sd.Services[0].Name;

         ServiceDescriptionImporter sdi=new ServiceDescriptionImporter();

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

         CodeNamespace cn=new CodeNamespace(@namespace);

         CodeCompileUnit ccu= new CodeCompileUnit();

         ccu.Namespaces.Add(cn);

         sdi.Import(cn,ccu);

         CsharpCodeProvider csc=new CsharpCodeProvider();

         //设定编译参数

         CompilerParameters cplist=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");

         //编译代理类

         CompilerResults cs =csc.CompileAssemblyFormDom(cplist,ccu);

         if(cs.Errors.HasErrors)

            {

              foreach(CompilerError ce in cs.Errors)

               {

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

               }

                throw new Exception(sb.ToString());

            }

           Assembly assembly =cs.CompiledAssembly;

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

          object obj =Activator.CreateInstance(t);

          MethodInfo mi=t.GetMethod(methodName);

          return mi.Invoke(obj,args);

      }

       catch(Exception e)

  &nbs

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇推荐一款好用的任务定时器:Quartz 下一篇C#基础复习(2) 之 装箱拆箱

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目