मैं एक ही समस्या है, जिससे मैं सेवाओं के एक जोड़े को इंगित करने के लिए एक परीक्षण दोहन चाहती थी:
आप विस्तृत परिदृश्य और नमूना परियोजना पा सकते हैं। प्रत्येक सेवा में सामान्य रूप से डेटाकंट्रैक्ट होंगे।
क्या जरूरत किया जाना:
- उपयोग svcutil साथ/टी: मेटाडाटा प्रत्येक यूआरएल पर।
- सेवा के लिए कुछ अद्वितीय के साथ सभी उत्पन्न फ़ाइलों का नाम बदलें एक ही स्थान के लिए (जैसे lala.xsd का नाम बदलें 1_lala.xsd करने के लिए)
- कॉपी सब उत्पन्न फ़ाइलों
- उपयोग svcutil साथ * .xsd .wsdl/बाहर : output.cs/नेमस्पेस:, MySpecialNamespace एक ही फ़ाइल में सभी सेवा अनुबंध और डेटाकंट्रैक्ट उत्पन्न करने के लिए।
आप चालाक होना चाहते हैं: का उपयोग निम्नलिखित टी -4 टेम्पलेट:
<#@ 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/प्रश्न/134064/पुन: उपयोग-मौजूदा-प्रकार-अनदेखा-जब-जोड़-एक-सेवा-संदर्भ) –