私はサービスのカップルを指すようにテストハーネスを望んでいたことにより、同じ問題を、持っていた:
あなたがそこに詳細なシナリオとサンプルプロジェクトを見つけることができます。各サービスには、データの共通点が共通しています。
- 使用svcutilと/ T:各URLのメタデータ何をすべきか
。 .wsdl /アウトを.XSD *と
- は、単一の場所に
- コピー生成されたすべてのファイルを(例えば1_lala.xsdするlala.xsdの名前を変更します)サービスのためのユニークな何かを
- 使用svcutilを生成されたすべてのファイルの名前を変更します:output.cs/namespace:、MySpecialNamespaceを使用すると、すべてのサービス契約とデータを1つのファイルに生成できます。
あなたが狡猾になりたい場合は、次のT4テンプレートを使用:の
<#@ template language="C#v4.0" hostspecific="True"#>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.IO" #>
<#=GetGeneratedCode(
"http://localhost/Service/Service1.svc",
"http://localhost/Service/Service2.svc",
"http://localhost/Service/Service3.svc",
"http://localhost/Service/Service4.svc"
)#>
<#+
const string _svcutil = @"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\svcutil.exe";
private string GetGeneratedCode(params string[] urls)
{
var tmp = GetTemporaryDirectory();
foreach (var url in urls)
{
GetMetadata(url, tmp);
}
RunSvcutil(tmp, "*.wsdl *.xsd /out:output.cs /namespace:*," + Path.GetFileNameWithoutExtension(Host.TemplateFile));
var result = File.ReadAllText(Path.Combine(tmp, "output.cs"));
return result;
}
private static void RunSvcutil(string workingFolder, string arguments)
{
var processInfo = new ProcessStartInfo(_svcutil);
processInfo.Arguments = arguments;
processInfo.WorkingDirectory = workingFolder;
var p = Process.Start(processInfo);
p.WaitForExit();
}
private static void GetMetadata(string url, string destination)
{
var workingFolder = GetTemporaryDirectory();
RunSvcutil(workingFolder, string.Format("/t:metadata \"{0}\"", url));
foreach (var filename in Directory.GetFiles(workingFolder))
{
File.Copy(filename, Path.Combine(destination, Path.GetFileNameWithoutExtension(url) + "_" + Path.GetFileName(filename)));
}
}
private static string GetTemporaryDirectory()
{
string tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(tempDirectory);
return tempDirectory;
}
#>
可能複製(http://stackoverflow.com [サービス参照を追加するとき、「再利用、既存のタイプは」無視されます]/question/134064/reuse-existing-types-is-ignored-service-referenceを追加するとき) –