zoukankan      html  css  js  c++  java
  • WebServiceHelper类

    01 using System;

    02 using System.Collections.Generic;
    03 using System.Text;
    04   
    05 using System.IO;
    06 using System.Configuration;
    07 using System.CodeDom;
    08 using System.CodeDom.Compiler;
    09 using System.Net;
    10 using System.Web.Services;
    11 using System.Web.Services.Description;
    12 using Microsoft.CSharp;
    13   
    14 namespace InvokeWebService
    15 {
    16     public static class WebServiceHelper
    17     {
    18         /// <summary>
    19         /// 动态调用WebService
    20         /// </summary>
    21         /// <param name="url">WebService地址</param>
    22         /// <param name="methodname">方法名(模块名)</param>
    23         /// <param name="args">参数列表</param>
    24         /// <returns>object</returns>
    25         public static object InvokeWebService(string url, string methodname, object[] args)
    26         {
    27             return InvokeWebService(url, null, methodname, args);
    28         }
    29         /// <summary>
    30         /// 动态调用WebService
    31         /// </summary>
    32         /// <param name="url">WebService地址</param>
    33         /// <param name="classname">类名</param>
    34         /// <param name="methodname">方法名(模块名)</param>
    35         /// <param name="args">参数列表</param>
    36         /// <returns>object</returns>
    37         public static object InvokeWebService(string url, string classname, string methodname, object[] args)
    38         {
    39             string @namespace = "ServiceBase.WebService.DynamicWebLoad";
    40             if (classname == null || classname == "")
    41             {
    42                 classname = WebServiceHelper.GetClassName(url);
    43             }
    44             //获取服务描述语言(WSDL)
    45             WebClient wc = new WebClient();
    46             Stream stream = wc.OpenRead(url + "?WSDL");
    47             ServiceDescription sd = ServiceDescription.Read(stream);
    48             ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
    49             sdi.AddServiceDescription(sd, "", "");
    50             CodeNamespace cn = new CodeNamespace(@namespace);
    51             //生成客户端代理类代码
    52             CodeCompileUnit ccu = new CodeCompileUnit();
    53             ccu.Namespaces.Add(cn);
    54             sdi.Import(cn, ccu);
    55             CSharpCodeProvider csc = new CSharpCodeProvider();
    56             ICodeCompiler icc = csc.CreateCompiler();
    57             //设定编译器的参数
    58             CompilerParameters cplist = new CompilerParameters();
    59             cplist.GenerateExecutable = false;
    60             cplist.GenerateInMemory = true;
    61             cplist.ReferencedAssemblies.Add("System.dll");
    62             cplist.ReferencedAssemblies.Add("System.XML.dll");
    63             cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
    64             cplist.ReferencedAssemblies.Add("System.Data.dll");
    65             //编译代理类
    66             CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
    67             if (true == cr.Errors.HasErrors)
    68             {
    69                 System.Text.StringBuilder sb = new StringBuilder();
    70                 foreach (CompilerError ce in cr.Errors)
    71                 {
    72                     sb.Append(ce.ToString());
    73                     sb.Append(System.Environment.NewLine);
    74                 }
    75                 throw new Exception(sb.ToString());
    76             }
    77   
    78             //生成代理实例,并调用方法
    79             System.Reflection.Assembly assembly = cr.CompiledAssembly;
    80             Type t = assembly.GetType(@namespace + "." + classname, true, true);
    81             object obj = Activator.CreateInstance(t);
    82             System.Reflection.MethodInfo mi = t.GetMethod(methodname);
    83             return mi.Invoke(obj, args);
    84   
    85         }
    86   
    87         private static string GetClassName(string url)
    88         {
    89             string[] parts = url.Split('/');
    90             string[] pps = parts[parts.Length - 1].Split('.');
    91             return pps[0];
    92         }
    93   
    94     }
    95 }
    作者:wpf之家
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    iOS----------如何检查域名是否支持ipv6
    iOS----------Charts3.0集成(手动导入)
    Cartfile学习参考博客
    iOS---------Xcode中添加预编译pch文件
    iOS ----------怎么修改xcode默认打开方式
    iOS -----------Downloading core failed:
    iOS----------导航栏的正确隐藏方式
    iOS----------The app's Info.plist must contain an NSPhotoLibraryUsageDescription key
    iOS--------获取当前连接的WiFi以及IP地址
    【2020Python修炼记】网络编程(一)网络通信协议
  • 原文地址:https://www.cnblogs.com/wpf123/p/2347381.html
Copyright © 2011-2022 走看看