欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

根据Webservice地址,动态传入参数(Webservice代理类)

程序员文章站 2022-03-20 10:21:08
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sunlib; using System.Net; using System.IO; using System.We ......

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)

       {

           sb.append(e.message).appendline();

           return null;

       }  

       finally

       {

         loghelper.writetxt(sb.tostring());

       } 

  }

}

 

public class updatedata

{

    public dynamic updatedatas(params string[] args)

    {

         //user用户名;pwd密码

       string result=webservice.invokewebservice(webserviceurl,methodname,new object[]{ user,pwd,args[0],args[1],args[2],args[3] }).tostring();

       //string result=webservice.invokewebservice(webserviceurl,methodname,new object[]{args }).tostring();

    }

}

 

public class synsreaddata

{

   public void readdata()

    {

     //

     updatedata updatedata=new  updatedata();

     dynamic rlt=updatedata.updatedatas(usercode,metercode,marktime,markdata);

     //dynamic rlt=updatedata.updatedatas(result.tostring());//result为json数据

     if(rlt==null)

      {

        sb.append("webservice调用异常返回null").appendline();

        continue;

      }

      //返回调用结果

      string execcode=rlt.retinfo.code.tostring();

    }

}