分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

动态调用web服务 --WSHelper.cs

发布时间:2023-09-06 01:30责任编辑:蔡小小关键词:暂无标签

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 WebApplication.Common
{
???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];
???????}
???}
}

动态调用web服务 --WSHelper.cs

原文地址:http://www.cnblogs.com/yachao1120/p/8035409.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved