using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Web.Services.Description;
using System.CodeDom;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection; namespace HTTPS
{
public class WSHelper
{
/// < summary>
/// 动态调用web服务
/// < /summary>
/// < param name="url">WSDL服务地址< /param>
/// < param name="methodname">方法名< /param>
/// < param name="args">参数< /param>
/// < returns>< /returns>
public static object InvokeWebService(string url, string methodname, object[] args)
{
return WSHelper.InvokeWebService(url, null, methodname, args);
}
/// < summary>
/// 动态调用web服务
/// < /summary>
/// < param name="url">WSDL服务地址< /param>
/// < param name="classname">类名< /param>
/// < param name="methodname">方法名< /param>
/// < param name="args">参数< /param>
/// < returns>< /returns>
public static object InvokeWebService(string url, string classname, string methodname, object[] args)
{
string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
if ((classname == null) || (classname == ""))
{
classname = WSHelper.GetWsClassName(url);
}
try
{ //获取WSDL
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url + "?WSDL");
ServiceDescription sd = ServiceDescription.Read(stream);
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 icc = 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 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);
// PropertyInfo propertyInfo = type.GetProperty(propertyname);
//return propertyInfo.GetValue(obj, null);
}
catch (Exception ex)
{
throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
}
}
private static string GetWsClassName(string wsUrl)
{
string[] parts = wsUrl.Split('/');
string[] pps = parts[parts.Length - 1].Split('.');
return pps[0];
}
}
}

调用

string url = "http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx";
            string[] args = new string[2];
            args[0] = "k123";
            args[1] = "";
            object result = WSHelper.InvokeWebService(url, "getDetailInfoByTrainCode", args);
            DataSet ds = (DataSet)result;
            this.GridView1.DataSource = ds;
            this.GridView1.DataBind();

其他别人的例子链接:http://linglong117.blog.163.com/blog/static/277145472009127514463/http://blog.sina.com.cn/s/blog_6427a6b501012omd.html

最新文章

  1. c#开源消息队列中间件EQueue 教程
  2. RecyclerView的使用(二)
  3. Linux配置notes
  4. Liferay7 BPM门户开发之42: Liferay核心JSP定制扩展
  5. 手工搭建Openvpn
  6. ios-指纹识别
  7. paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)
  8. Poj(1511),SPFA
  9. iBeacon
  10. POJ 2029 Get Many Persimmon Trees(水题)
  11. Mysql 视图笔记2
  12. mysql innodb myisam 主要区别与更改方法
  13. HDU 4945 2048(DP)
  14. Nginx 错误处理方法: bind() to 0.0.0.0:80 failed
  15. java设计模式------工厂设计模式
  16. html----不常见标签
  17. Linux tar压缩命令 排除某个目录 (根据man tar 总结)
  18. HTTP Status 400 - description The request sent by the client was syntactically incorrect.
  19. 视频转换ffmpeg
  20. 【论文阅读】Sliding Line Point Regression for Shape Robust Scene Text Detection

热门文章

  1. Struts全局跳转
  2. 获得Spring容器
  3. springboots Helloworld
  4. 使用 ahk 让普通键盘变为Dvorak键盘
  5. C#将Dll嵌入到EXE
  6. MFC动态时间表示法——strtime函数
  7. Java学习-jsp内置对象Session
  8. MD5 加盐(Java)
  9. git 查看和撤销
  10. mysql数据库定时任务