zoukankan      html  css  js  c++  java
  • 【整理】动态加载Web Services

    WebClient client = new WebClient();
    String url = "http://localhost/MESAPIWebService/MESAPI.asmx?WSDL";//这个地址可以写在Config文件里面,这里取出来就行了.在原地址后面加上: ?WSDL
    Stream stream = client.OpenRead(url);
    ServiceDescription description = ServiceDescription.Read(stream);

    ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。

    importer.ProtocolName = "Soap"; //指定访问协议。
    importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。
    importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;

    importer.AddServiceDescription(description, null, null); //添加WSDL文档。

    CodeNamespace nmspace = new CodeNamespace(); //命名空间
    nmspace.Name = "MESWebService";
    CodeCompileUnit unit = new CodeCompileUnit();
    unit.Namespaces.Add(nmspace);

    ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
    CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

    CompilerParameters parameter = new CompilerParameters();
    parameter.GenerateExecutable = false;
    parameter.OutputAssembly = "MyTest.dll";//输出程序集的名称
    parameter.ReferencedAssemblies.Add("System.dll");
    parameter.ReferencedAssemblies.Add("System.XML.dll");
    parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
    parameter.ReferencedAssemblies.Add("System.Data.dll");

    CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);
    if (result.Errors.HasErrors)
    {
    // 显示编译错误信息
    }

    Assembly asm = Assembly.LoadFrom("MyTest.dll");//加载前面生成的程序集
    Type t = asm.GetType("MESWebService.Service");

    object o = Activator.CreateInstance(t);
    MethodInfo method = t.GetMethod("GetUserInfo");//GetPersons是服务端的方法名称,你想调用服务端的什么方法都可以在这里改,最好封装一下

    DataSet ds = (DataSet)method.Invoke(o, new object[] { "CN04633" });

  • 相关阅读:
    Guzz入门教程
    设计模式开题
    纪录idea不能创建class类问题(Cannot Create Class)
    dbrouter实现流程图
    记录一次concurrent mode failure问题排查过程以及解决思路
    程序员的自我修养
    CyclicBarrier之共享锁的理解
    sed选项详解(options)
    sed 范围查找
    Sed命令
  • 原文地址:https://www.cnblogs.com/wonder315/p/4325450.html
Copyright © 2011-2022 走看看