2016-07-20 10 views
4

私は現在、起動時にスクリプトを読み込んでスケジュールに合わせてコンパイルするWindowsサービスを運用していますが、これらのスクリプトの中にはASMX Webサービスにアクセスする必要があるものがあります。WSDLからプロキシクラスを生成していますか?

私の好みでは、これらのWSDLファイルをコードで使用して、コンパイルできる.vbファイルを生成することです。

これをコマンドラインなしでどうすれば達成できますか?

+0

'コマンドラインなし'は、他の外部アプリを呼び出さずに、プログラム的に意味しますか? –

+0

'wsdl.exe'を呼び出すと何が問題になりますか? –

答えて

2

あなたがCommandLineをからネイティブ/レガシー・ツールを使用したいが、ここであなたが行くいけない、なぜ私は、本当に取得いけない:これは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("Vb")CodeDomProvider.CreateProvider("CSharp")
に置き換えて、c#ファイルを生成することもできます。このC odeは非常に簡単なthis WSDLでテストされています。

関連する問題