2016-07-20 3 views
4

현재 시작된 스크립트를로드하고 일정에 따라 실행하도록 컴파일하는 Windows 서비스가 있지만 일부 스크립트는 ASMX 웹 서비스에 액세스해야합니다.즉석에서 WSDL로부터 프록시 클래스 생성?

필자가 선호하는 코드는이 WSDL 파일을 사용하여 컴파일 할 준비가 된 .vb 파일을 생성하는 것입니다.

어떻게 명령 줄없이이 작업을 수행 할 수 있습니까?

+0

'명령 줄없이'는 프로그래밍 방식으로, 다른 외부 응용 프로그램을 호출하지 않고? –

+0

'wsdl.exe'를 호출하는 것이 잘못된 이유는 무엇입니까? –

답변

2

내가 그나마 정말 당신이 명령 줄에서 기본/레거시 도구를 사용하려는 해달라고하지만, 여기 당신이가는 이유를 얻을 :이 System.CodeDomSystem.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으로 테스트됩니다.