从 WSDL 动态生成代理 class?
Generating proxy class from WSDL on the fly?
我目前正在使用 Windows 服务,该服务在启动时会加载大量脚本并按计划为 运行 编译它们,但是其中一些脚本需要访问 ASMX 网络服务。
我的偏好是在代码中使用这些 WSDL 文件来生成可供我编译的 .vb 文件。
如果没有命令行,我怎么能做到这一点?
我不太明白,为什么你不想使用 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.CodeDom
和System.CodeDom.Compiler
您还可以通过将 CodeDomProvider.CreateProvider("Vb")
替换为 CodeDomProvider.CreateProvider("CSharp")
来生成 c# 文件
此代码已使用 this WSDL 进行测试,非常简单。
我目前正在使用 Windows 服务,该服务在启动时会加载大量脚本并按计划为 运行 编译它们,但是其中一些脚本需要访问 ASMX 网络服务。
我的偏好是在代码中使用这些 WSDL 文件来生成可供我编译的 .vb 文件。
如果没有命令行,我怎么能做到这一点?
我不太明白,为什么你不想使用 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.CodeDom
和System.CodeDom.Compiler
您还可以通过将 CodeDomProvider.CreateProvider("Vb")
替换为 CodeDomProvider.CreateProvider("CSharp")
来生成 c# 文件
此代码已使用 this WSDL 进行测试,非常简单。