IT干货网

.net之从 WSDL 动态生成代理类

mate10pro 2024年11月01日 编程设计 8 0

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

我更喜欢在代码中使用这些 WSDL 文件来生成 .vb 文件,供我编译。

没有命令行我怎么能做到这一点?

请您参考如下方法:

我真的不明白,为什么你不想使用命令行中的 native /遗留工具,但是你去吧:

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您还可以生成 c# 文件通过替换 CodeDomProvider.CreateProvider("Vb")CodeDomProvider.CreateProvider("CSharp")此代码已使用 this WSDL 进行测试这很简单。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!