4
현재 시작된 스크립트를로드하고 일정에 따라 실행하도록 컴파일하는 Windows 서비스가 있지만 일부 스크립트는 ASMX 웹 서비스에 액세스해야합니다.즉석에서 WSDL로부터 프록시 클래스 생성?
필자가 선호하는 코드는이 WSDL 파일을 사용하여 컴파일 할 준비가 된 .vb 파일을 생성하는 것입니다.
어떻게 명령 줄없이이 작업을 수행 할 수 있습니까?
현재 시작된 스크립트를로드하고 일정에 따라 실행하도록 컴파일하는 Windows 서비스가 있지만 일부 스크립트는 ASMX 웹 서비스에 액세스해야합니다.즉석에서 WSDL로부터 프록시 클래스 생성?
필자가 선호하는 코드는이 WSDL 파일을 사용하여 컴파일 할 준비가 된 .vb 파일을 생성하는 것입니다.
어떻게 명령 줄없이이 작업을 수행 할 수 있습니까?
내가 그나마 정말 당신이 명령 줄에서 기본/레거시 도구를 사용하려는 해달라고하지만, 여기 당신이가는 이유를 얻을 :이 System.CodeDom
및 System.CodeDom.Compiler
에 따라됩니다
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);
}
주
에게
는 또한 CodeDomProvider.CreateProvider("CSharp")
이 C로 CodeDomProvider.CreateProvider("Vb")
를 교체하여 C# 파일을 생성 할 수 있습니다 ode는 매우 단순한 this WSDL으로 테스트됩니다.
'명령 줄없이'는 프로그래밍 방식으로, 다른 외부 응용 프로그램을 호출하지 않고? –
'wsdl.exe'를 호출하는 것이 잘못된 이유는 무엇입니까? –