WSDL から XML Web サービスを生成する機能を Visual Studio で探したけど、 見つけられなかったのでコード書いてみた。
System.Web.Services.Description 名前空間にある ServiceDescription と ServiceDescriptionImporter、 あと CodeDom を使って生成できた。
using System; using System.CodeDom; using System.CodeDom.Compiler; using System.IO; using System.Text; using System.Web.Services.Description; using System.Xml.Serialization; namespace WebServiceGenerator { class Program { static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine("WebServiceGenerator.exe wsdlFilePath outputFilePath"); return; } var wsdlFilePath = args[0]; var outputFilePath = args[1]; if (File.Exists(wsdlFilePath) == false) { Console.WriteLine($"'{wsdlFilePath}' is not found."); return; } // WSDL を読み込む var description = ServiceDescription.Read(wsdlFilePath); var importer = new ServiceDescriptionImporter { ProtocolName = "Soap", // 今回は SOAP Style = ServiceDescriptionImportStyle.Server, CodeGenerationOptions = CodeGenerationOptions.GenerateProperties, }; importer.AddServiceDescription(description, null, null); var codeNamespace = new CodeNamespace(); var codeUnit = new CodeCompileUnit(); codeUnit.Namespaces.Add(codeNamespace); // 読み込んだ WSDL から XML Web サービスのコードを生成 var importWarnings = importer.Import(codeNamespace, codeUnit); if (importWarnings != 0) { // 警告が出ていたら失敗とみなす Console.WriteLine($"failed! - ({importWarnings})"); return; } // XML Web サービスを C# コードでファイルに出力 using(var writer = new StreamWriter(outputFilePath, false, Encoding.UTF8)) { var codeProvider = CodeDomProvider.CreateProvider("CSharp"); codeProvider.GenerateCodeFromCompileUnit(codeUnit, writer, new CodeGeneratorOptions()); } Console.WriteLine("succeeded!"); } } }