e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
72 lines
2.4 KiB
C#
72 lines
2.4 KiB
C#
//------------------------------------------------------------------------------
|
|
// <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);
|
|
}
|
|
}
|
|
|
|
}
|