根据Webservice地址,动态传入参数(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)
{
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代理类)的更多相关文章
- 动态sql语句和动态传入参数个数
1.可以将要传入的几个参数封装成一个实体类,然后将实体类作为一个参数传入到相应的方法中,这时候就需要这sqlMapper.xml文件中对传入的字段利用<if test=""& ...
- RF--执行案例时动态传入参数方法
通过在运行界面的设定-v 参数值来动态传入:
- mybatis 框架动态传入参数${}和#{}之间的区别
动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先来熟悉下myb ...
- PHP如何动态传入参数
首先需要说明的是,URL写作/index.php/xx/b/c可以直接被index.php文件接受,而不用做任何额外的操作 但是如果需要在URL中隐藏index.php的话,才需要伪静态重写规则,将^ ...
- 动态得到WCF的代理类并生成代码
Uri uri = new Uri("http://localhost:6580/Service1.svc?wsdl"); MetadataExchange ...
- 动态调用WebService的代理类
using System; using System.Collections; using System.ComponentModel; using System.Data; using System ...
- webservice接口测试wsdl,参数是xml格式。python,入参转化成str,返回值转化成dict调用
1.用SoapUI测试webservice接口,传入参数是xml格式时.xml格式需要将xml的外围增加<![CDATA[xml]]> 2.但是用python去做webservice测试, ...
- Unity生成WebService代理类
普通的.net程序中,如果我们想引用webService,只需在项目中右键选择添加服务引用,然后在地址栏中输入Webservice地址,单击“转到”按钮,找到服务后再单击确定,Visual Studi ...
- SpringAOP-JDK 动态代理和 CGLIB 代理
在 Spring 中 AOP 代理使用 JDK 动态代理和 CGLIB 代理来实现,默认如果目标对象是接口,则使用 JDK 动态代理,否则使用 CGLIB 来生成代理类. 1.JDK 动态代理 那么接 ...
随机推荐
- Flutter的初体验--初次配置的问题
首先参照官方文档进行搭建Mac下的环境 ,然后就会遇到以下问题: 1.在下载了Flutter 之后,执行Flutter doctor之后,报错: Could not resolve URL &qu ...
- 使用BCDEDIT创建BCD文件
网上找了好久,总算找到一个完全的BCD文件编辑过程的代码,分享下: ###第1步############################################################ ...
- Storm入门(十四)Trident API Overview
The core data model in Trident is the "Stream", processed as a series of batches. A stream ...
- react-router详细解释
react-router的理解 react的一个插件库,专门用来实现一个SPA应用(单页Web应用(single page web application,SPA)整个应用只有一个完整的页面,点击页面 ...
- 积极拥抱.NET Core开源社区
潘正磊在上海的Tech Summit 2018 大会上给我们的.NET Core以及开源情况带来了最新信息. .Net Core 开源后取得了更加快速的发展,目前越活跃用户高达400万人,每月新增开发 ...
- Java引用详解-StrongReference SoftReference WeakReference PhantomReference
1 Java引用介绍 Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为: 强引用 > 软引用 > 弱引用 > 虚引用 ⑴强引用(StrongR ...
- C#实现将Chart图表生成JPG图片的方法
SaveFileDialog savefile= new SaveFileDialog(); savefile.Filter = "JPEG文件|*.jpg" ...
- webpack4打包nodejs项目进阶版——多页应用模板
前段时间我写了个打包nodejs项目的文章,点击前往 但是,问题很多.因为之前的项目是个历史遗留项目,重构起来可能会爆炸,当时又比较急所以就写个的适用范围很小的webpack的打包方法. 最近稍微得空 ...
- java SE Development kit 8 Update 201 (64-bit) 的安装相关
登录http://www.oracle.com,下载JDK(J2SE) JDK 1.0,1.1,1.2,1.3,1.4 1.5 (JDK5.0) à支持注解.支持泛型 1.6(JDK6.0) à ...
- 如何机智判断页面是刷新还是关闭,背景:vue项目,需求:关闭页面,下次直接跳到登陆页
最近项目有这么个需求:要在关闭当前系统的窗口的时候,退出登录, 因为如果不退出登录可能存在安全风险,其实我想说,电脑没事别借给别人活着离开工位记得一定要锁屏,其实我们设置了cookie失效时间的,过了 ...