栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C# 动态调用WebService的示例

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# 动态调用WebService的示例

WebServiceHelper代码:

using Microsoft.CSharp;
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Web.Services.Description;
using System.Xml.Serialization;

namespace SunCreate.HaiKang8600WebService.Utils
{
  /// 
  /// 动态调用WebService
  /// 
  public static class WebServiceHelper
  {
    /// 
    /// 动态调用WebService
    /// 
    /// WebService地址
    /// 命名空间
    /// 类名
    /// 方法名(模块名)
    /// 参数列表
    public static object InvokeWebService(string url, string strNamespace, string className, string methodName, object[] args)
    {
      try
      {
 WebClient webClient = new WebClient();
 Stream stream = webClient.OpenRead(url); //获取服务描述语言(WSDL)

 ServiceDescription serviceDescription = ServiceDescription.Read(stream); //通过直接从 Stream实例加载 XML 来初始化ServiceDescription类的实例。
 ServiceDescriptionimporter serviceDescriptionimporter = new ServiceDescriptionimporter();
 serviceDescriptionimporter.AddServiceDescription(serviceDescription, null, null);

 //生成客户端代理类代码
 CodeNamespace codeNamespace = new CodeNamespace(strNamespace); //CodeNamespace表示命名空间声明。
 CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
 codeCompileUnit.Namespaces.Add(codeNamespace);
 serviceDescriptionimporter.import(codeNamespace, codeCompileUnit);

 CSharpCodeProvider csharpCodeProvider = new CSharpCodeProvider();
 ICodeCompiler iCodeCompiler = csharpCodeProvider.CreateCompiler();//取得C#程式码编译器的执行个体

 //设定编译器的参数
 CompilerParameters compilerParameters = new CompilerParameters();//创建编译器的参数实例
 compilerParameters.GenerateExecutable = false;
 compilerParameters.GenerateInMemory = true;
 compilerParameters.ReferencedAssemblies.Add("System.dll");
 compilerParameters.ReferencedAssemblies.Add("System.XML.dll");
 compilerParameters.ReferencedAssemblies.Add("System.Web.Services.dll");
 compilerParameters.ReferencedAssemblies.Add("System.Data.dll");

 //编译代理类
 CompilerResults compilerResults = iCodeCompiler.CompileAssemblyFromDom(compilerParameters, codeCompileUnit);
 if (true == compilerResults.Errors.HasErrors)
 {
   StringBuilder sb = new StringBuilder();
   foreach (CompilerError ce in compilerResults.Errors)
   {
     sb.Append(ce.ToString());
     sb.Append(System.Environment.newline);
   }
   throw new Exception(sb.ToString());
 }

 //生成代理实例,并调用方法
 System.Reflection.Assembly assembly = compilerResults.CompiledAssembly;
 Type type = assembly.GetType(strNamespace + "." + className, true, true);
 object obj = Activator.CreateInstance(type);
 System.Reflection.MethodInfo methodInfo = type.GetMethod(methodName); //MethodInfo 的实例可以通过调用GetMethods或者Type对象或派生自Type的对象的GetMethod方法来获取,还可以通过调用表示泛型方法定义的 MethodInfo 的MakeGenericMethod方法来获取。
 return methodInfo.Invoke(obj, args);
      }
      catch (Exception ex)
      {
 LogUtil.LogError(ex, "动态调用WebService 错误");
 return null;
      }
    }

  }
}

使用示例:

string url = "http://172.16.36.26:8080/attachment/services/AttachmentService?wsdl";
object[] args = new object[2];
args[0] = "1";
args[1] = "1";
object str = WebServiceHelper.InvokeWebService(url, "service.webservice", "AttachmentService", "checkGrade", args);
string sstr = str.ToString();

以上就是C# 动态调用WebService的示例的详细内容,更多关于C# 动态调用WebService的资料请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/121705.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号