从WSDL动态生成代理类?

时间:2016-07-20 13:35:19

标签: .net wsdl

我目前正在使用Windows服务,该服务在启动时会占用大量脚本并将其编译为按计划运行,但是其中一些脚本需要访问ASMX Web服务。

我的偏好是在代码中使用这些WSDL文件来生成.vb文件,以供我编译。

如果没有命令行,我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:2)

我真的不明白,为什么你不想使用CommandLine中的native / legacy-Tools,但是你走了:

var wsdlDescription = ServiceDescription.Read(YourWSDLFile);
      var wsdlImporter = new ServiceDescriptionImporter();
      wsdlImporter.ProtocolName = "Soap12"; //Might differ
      wsdlImporter.AddServiceDescription(wsdlDescription, null, null);
      wsdlImporter.Style = ServiceDescriptionImportStyle.Server;
      wsdlImporter.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
      var codeNamespace = new CodeNamespace();
      var codeUnit = new CodeCompileUnit();
      codeUnit.Namespaces.Add(codeNamespace);
      var importWarning = wsdlImporter.Import(codeNamespace, codeUnit);
      if (importWarning == 0) {
        var stringBuilder = new StringBuilder();
        var stringWriter = new StringWriter(stringBuilder);
        var codeProvider = CodeDomProvider.CreateProvider("Vb");
        codeProvider.GenerateCodeFromCompileUnit(codeUnit, stringWriter, new CodeGeneratorOptions());
        stringWriter.Close();
        File.WriteAllText(WhereYouWantYourClass, stringBuilder.ToString(), Encoding.UTF8);

      } else {

        Console.WriteLine(importWarning);

      }

注意

这取决于System.CodeDomSystem.CodeDom.Compiler
您还可以将CodeDomProvider.CreateProvider("Vb")替换为CodeDomProvider.CreateProvider("CSharp")来生成 c#文件 本代码使用this WSDL进行测试,非常简单。