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;
}
var description = ServiceDescription.Read(wsdlFilePath);
var importer = new ServiceDescriptionImporter
{
ProtocolName = "Soap",
Style = ServiceDescriptionImportStyle.Server,
CodeGenerationOptions = CodeGenerationOptions.GenerateProperties,
};
importer.AddServiceDescription(description, null, null);
var codeNamespace = new CodeNamespace();
var codeUnit = new CodeCompileUnit();
codeUnit.Namespaces.Add(codeNamespace);
var importWarnings = importer.Import(codeNamespace, codeUnit);
if (importWarnings != 0)
{
Console.WriteLine($"failed! - ({importWarnings})");
return;
}
using(var writer = new StreamWriter(outputFilePath, false, Encoding.UTF8))
{
var codeProvider = CodeDomProvider.CreateProvider("CSharp");
codeProvider.GenerateCodeFromCompileUnit(codeUnit, writer, new CodeGeneratorOptions());
}
Console.WriteLine("succeeded!");
}
}
}