WebService WSDL动态访问

ClassName:WebServiceInvoke.cs

ClassCode:


  1 using System;
2 using System.CodeDom;
3 using System.CodeDom.Compiler;
4 using System.IO;
5 using System.Linq;
6 using System.Net;
7 using System.Reflection;
8 using System.Text;
9 using System.Web.Services.Description;
10 using Microsoft.CSharp;
11
12 /// <summary>
13 ///动态链接web server
14 /// </summary>
15 public class WebServiceInvoke
16 {
17 public WebServiceInvoke()
18 {
19 //
20 //TODO: 在此处添加构造函数逻辑
21 //
22 }
23
24 /// <summary>
25 /// 调用web 服务
26 /// </summary>
27 /// <param name="url">webServer url</param>
28 /// <param name="className">web Server ClassName</param>
29 /// <param name="methodName">web Server methodName</param>
30 /// <param name="parameters">method parameter</param>
31 /// <returns>retValue</returns>
32 public object InvokeWebService(string url,string className,string methodName,object[] parameters)
33 {
34 //1. 从目标 URL 下载 WSDL 数据。
35 //2. 使用 ServiceDescription 创建和格式化 WSDL 文档文件。
36 //3. 使用 ServiceDescriptionImporter 创建客户端代理类。
37 //4. 使用 CodeDom 动态创建客户端代理类程序集。
38 //5. 利用反射调用相关 WebService 方法。
39
40 string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
41 if (string.IsNullOrEmpty(className))
42 className = GetClassName(url);
43
44 try
45 {
46 //获取WSDL数据
47 WebClient webClient = new WebClient();
48 Stream stream= webClient.OpenRead(url + "?WSDL");
49 ServiceDescription sDescription = ServiceDescription.Read(stream);
50 ServiceDescriptionImporter sDescriptionImporter = new ServiceDescriptionImporter();
51 sDescriptionImporter.AddServiceDescription(sDescription, "", "");
52
53 //生成客户端代理类代码
54 CodeNamespace codeNamespace = new CodeNamespace(@namespace);
55 CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
56 codeCompileUnit.Namespaces.Add(codeNamespace);
57 sDescriptionImporter.Import(codeNamespace, codeCompileUnit);
58
59 //设定编译参数
60 CompilerParameters compilerList = new CompilerParameters
61 {
62 GenerateExecutable=false,
63 GenerateInMemory=true
64 };
65 compilerList.ReferencedAssemblies.Add("System.dll");
66 compilerList.ReferencedAssemblies.Add("System.XML.dll");
67 compilerList.ReferencedAssemblies.Add("System.Web.Services.dll");
68 compilerList.ReferencedAssemblies.Add("System.Data.dll");
69
70 //编译代理类
71 CSharpCodeProvider csharpCodeProvider = new CSharpCodeProvider();
72 CompilerResults compilerResult = csharpCodeProvider.CompileAssemblyFromDom(compilerList, codeCompileUnit);
73 if (compilerResult.Errors.HasErrors == true)
74 {
75 StringBuilder errorSb = new StringBuilder();
76 foreach (var item in compilerResult.Errors)
77 {
78 errorSb.Append(item.ToString());
79 errorSb.Append(System.Environment.NewLine);
80 }
81 throw new Exception(errorSb.ToString());
82 }
83
84 //生成代理实例,调用方法
85 Assembly assembly = compilerResult.CompiledAssembly;
86 Type t = assembly.GetType(@namespace + "." + className, true, true);
87 object obj = Activator.CreateInstance(t);
88 MethodInfo methodInfo = t.GetMethod(methodName);
89 var retValue= methodInfo.Invoke(obj, parameters);
90 return retValue;
91 }
92 catch (Exception ex)
93 {
94 throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
95 }
96 }
97
98 /// <summary>
99 /// 获取ClassName
100 /// </summary>
101 /// <param name="url">web Server url</param>
102 /// <returns>className</returns>
103 private string GetClassName(string url)
104 {
105 string[] urlArray = url.Split(‘/‘);
106 return urlArray[urlArray.Count() - 1].Split(‘.‘)[0];
107 }
108 }

Use Code:

1   WebServiceInvokewi = new WebServiceInvoke();
2 byte[] byteArray = System.Text.Encoding.Default.GetBytes(XML);
3 object[] parameters = { byteArray, "0" };
4 wi.InvokeWebService(url_to, "DisService", "ImpLes", parameters);

WebService WSDL动态访问

时间: 2024-10-11 21:04:10

WebService WSDL动态访问的相关文章

C#调用WebService服务(动态调用)

原文:C#调用WebService服务(动态调用) 1 创建WebService using System; using System.Web.Services; namespace WebService1 { /// <summary> /// Service1 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/", Description="测试服务")] [

WebService WSDL详解(上)

为什么使用WSDL? 像Internet协议之类的标准有没有为权威所利用,或者人们这样看待它是因为顺之所获的好处远远超出了代价?曾经有许多试图建立的标准都流产了.有时候,那些还没有普遍使用的标准甚至由法令或政府规定强行推出:Ada语言就是一例. 我相信正是跟随标准所带来的好处使它广泛接受.例如,对于铁路服务来说,真正重要的是,不同公司所铺设的铁路结合到一起,或者是来自好几个公司的产品协调的工作在一起.几家大的企业合力建立了SOAP标准.Web Service描述语言(WSDL)向这种Web Se

清默网络——动态访问列表

动态访问列表 动态ACL,也被称为lock-and-key ACL,在1996年作为选项引入思科 IOS.动态ACL仅支持IP流量.动态ACL依赖于telnet连接,用户telnet路由器,并验证通过,此时telnet自动断开,并动态产生一条 临时ACL语句.当一段时间内,无该语句相关流量通过,临时的ACL语句消失.         动态访问表是对传统访问表的一种重要功能增强.我们从动态访问表的名称就可以看出,动态访问表是能够创建动态访问表项的访问表.传统的标准访问表和扩展 的访问表不能创建动态

[namespace]PHP命名空间的动态访问 &amp; 使用技巧

----------------------------------------------------------------------------------------------- /* |---------------------------------------- |一.动态访问命名空间的元素 |@黑眼诗人 <www.chenwei.ws> |---------------------------------------- */ namespace me\poet; funct

动态调用WebService时动态获取返回Class中的属性

直接给代码: var ret = HTTPS.WSHelper.InvokeWebService("WebService URL", "MethodName", object[] args);var type = ret.GetType();var propertyinfo = type.GetProperty("result");if (propertyinfo == null){       throw new Exception("

从webservice wsdl生成代码

打开vs命令提示行 1. wsdl /language:c# /n:proxy.Unicom /out:E:\publish\proxy.Unicom.cs E:\publish\unicom.wsdl2. csc /out:E:\publish\proxy.Unicom.dll /t:library /r:System.XML.dll /r:System.Web.Services.dll  E:\publish\proxy.Unicom.cs 说明 /n:代码所属命名空间  /out:代码文件

FreeCMS怎么动态访问模板?

原文地址:http://javaz.cn/site/javaz/site_study/info/2015/31166.html 项目地址:http://www.freeteam.cn/ FreeCMS商业版提供此功能.共有两种方式. 1.使用templetPro.do访问 ${contextPath}templetPro.do?siteid=${site.id}&templetPath=index.html siteid参数代表站点id. templetPath参数代表要动态访问此站点所用模板下

WebService WSDL结构分析

转载地址:http://blog.csdn.net/sunchaohuang/article/details/3076375      WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用).WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输

通过web的方式动态访问Tomcat的catalina.out日志

1:安装web.py 参考:http://webpy.org/install.zh-cn 下载web.py # wget http://webpy.org/static/web.py-0.33.tar.gz 安装web.py # tar zxvf web.py-0.33.tar.gz # cd web.py-0.33 使所有的web程序可以访问 # python setup.py install OK,安装完毕,关于web.py请参考http://webpy.org/install.zh-cn