1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
//------------------------------------------------------------------------------
// <copyright file="WsdlBuildProvider.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
namespace System.Web.Compilation {
using System;
using System.Globalization;
using System.IO;
using System.Diagnostics;
using System.Web.Services.Description;
using System.Xml;
using System.Xml.Serialization;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Web.Configuration;
using System.Web.Hosting;
using System.Web.Util;
using Util=System.Web.UI.Util;
[BuildProviderAppliesTo(BuildProviderAppliesTo.Code)]
internal class WsdlBuildProvider: BuildProvider {
public override void GenerateCode(AssemblyBuilder assemblyBuilder) {
// Get the namespace that we will use
string ns = Util.GetNamespaceFromVirtualPath(VirtualPathObject);
ServiceDescription sd;
// Load the wsdl file
using (Stream stream = VirtualPathObject.OpenFile()) {
try {
sd = ServiceDescription.Read(stream);
}
catch (InvalidOperationException e) {
// It can throw an InvalidOperationException, with the relevant
// XmlException as the inner exception. If so, throw that instead.
XmlException xmlException = e.InnerException as XmlException;
if (xmlException != null)
throw xmlException;
throw;
}
}
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
#if !FEATURE_PAL
importer.CodeGenerator = assemblyBuilder.CodeDomProvider;
importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties |
CodeGenerationOptions.GenerateNewAsync | CodeGenerationOptions.GenerateOldAsync;
#endif // !FEATURE_PAL
importer.ServiceDescriptions.Add(sd);
CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
CodeNamespace codeNamespace = new CodeNamespace(ns);
codeCompileUnit.Namespaces.Add(codeNamespace);
// Create the code compile unit
importer.Import(codeNamespace, codeCompileUnit);
// Add the CodeCompileUnit to the compilation
assemblyBuilder.AddCodeCompileUnit(this, codeCompileUnit);
}
}
}
|