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();

}

}

根据Webservice地址,动态传入参数(Webservice代理类)的更多相关文章

  1. 动态sql语句和动态传入参数个数

    1.可以将要传入的几个参数封装成一个实体类,然后将实体类作为一个参数传入到相应的方法中,这时候就需要这sqlMapper.xml文件中对传入的字段利用<if test=""& ...

  2. RF--执行案例时动态传入参数方法

    通过在运行界面的设定-v 参数值来动态传入:

  3. mybatis 框架动态传入参数${}和#{}之间的区别

    动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先来熟悉下myb ...

  4. PHP如何动态传入参数

    首先需要说明的是,URL写作/index.php/xx/b/c可以直接被index.php文件接受,而不用做任何额外的操作 但是如果需要在URL中隐藏index.php的话,才需要伪静态重写规则,将^ ...

  5. 动态得到WCF的代理类并生成代码

    Uri uri = new Uri("http://localhost:6580/Service1.svc?wsdl");             MetadataExchange ...

  6. 动态调用WebService的代理类

    using System; using System.Collections; using System.ComponentModel; using System.Data; using System ...

  7. webservice接口测试wsdl,参数是xml格式。python,入参转化成str,返回值转化成dict调用

    1.用SoapUI测试webservice接口,传入参数是xml格式时.xml格式需要将xml的外围增加<![CDATA[xml]]> 2.但是用python去做webservice测试, ...

  8. Unity生成WebService代理类

    普通的.net程序中,如果我们想引用webService,只需在项目中右键选择添加服务引用,然后在地址栏中输入Webservice地址,单击“转到”按钮,找到服务后再单击确定,Visual Studi ...

  9. SpringAOP-JDK 动态代理和 CGLIB 代理

    在 Spring 中 AOP 代理使用 JDK 动态代理和 CGLIB 代理来实现,默认如果目标对象是接口,则使用 JDK 动态代理,否则使用 CGLIB 来生成代理类. 1.JDK 动态代理 那么接 ...

随机推荐

  1. SAP MM Storage Location Missing in MD04 Result?

    SAP MM Storage Location Missing in MD04 Result? Today I received a ticket from business team, a user ...

  2. android 自定义权限管理

    在Android6.0后有些权限就需要进行询问,虽然可以将targetSdkVersion设置成小于等于23,但是这样可能有些东西无法使用,所以要进行权限的管理. 实现逻辑:打开页面就询问权限,如果没 ...

  3. 学习ELk之----02. Elastic Search操作入门

    我们将使用Postman来进行日志写入操作.Postman的下载地址,你可以Google一下. 1. 在上一节中,我们启动完成ELK的Docker后,可以在浏览器中打开:http://192.168. ...

  4. Java内存模型一个经典例子-指令重排序与CPU指令多发射导致执行结果异常

    先上代码: import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; ...

  5. mysql之聚合函数、group by、having

    sql中提供聚合函数可以用来统计,求和,求最值等 那么聚合函数有哪些呢? COUNT    统计行数量 SUM         求某一列的和 AVG          求某一列的平均值 MAX  求某 ...

  6. 让你用 Chrome 上网快到想哭:Vimium

    Chrome 已经成了很多人的主力浏览器,你可能被它的简洁快速所吸引,但它日益丰富的「扩展」,你可能从来都没有接触过,而事实上,很多扩展可以挖掘出 Chrome 的潜能,让它变得前所未有的强大.有哪些 ...

  7. Spring 数据库读写分离

    读写分离常见有俩种方式 1 第一种方式比较常用就是定义2个数据库连接,一个是Master,另一个是Slave.更新数据时我们取Master,查询数据时取Slave.太过简单不做介绍. 2 第二种方数据 ...

  8. redis 初识

    架构 sharding redis 集群是主从式架构,数据分片是根据hash slot(哈希槽来分布) 总共有16384个哈希槽,所以理论上来说,集群的最大节点(master) 数量是16384个.一 ...

  9. nginx 报错502Bad Gateway

    场景: 目前在ECS中起了多个node服务,使用forever进程守护,最近,打开线上页面发现报错502 Bad Gateway;同时部分静态资源访问不到.(之前可以的): 解决: 首先查看nginx ...

  10. github仓库的使用

    业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103 远程仓库地址是:https://github.com/BinGuo66 ...