| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- //
- // System.Web.Compilation.WebServiceCompiler
- //
- // Authors:
- // Gonzalo Paniagua Javier ([email protected])
- //
- // (C) 2002 Ximian, Inc (http://www.ximian.com)
- //
- using System;
- using System.IO;
- using System.Reflection;
- using System.Web.UI;
- namespace System.Web.Compilation
- {
- class WebServiceCompiler : BaseCompiler
- {
- SimpleWebHandlerParser wService;
- string sourceFile;
- private WebServiceCompiler (SimpleWebHandlerParser wService)
- {
- this.wService = wService;
- }
- public static Type CompileIntoType (SimpleWebHandlerParser wService)
- {
- CompilationCacheItem item = CachingCompiler.GetCached (wService.PhysicalPath);
- if (item != null && item.Result != null) {
- if (item.Result != null)
- return item.Result.Data as Type;
- throw new CompilationException (item.Result);
- }
- WebServiceCompiler wsc = new WebServiceCompiler (wService);
- return wsc.GetCompiledType ();
- }
- static string GenerateSourceFile (SimpleWebHandlerParser wService)
- {
- //FIXME: should get Tmp dir for this application
- string csName = Path.GetTempFileName ();
- StreamWriter output = new StreamWriter (File.OpenWrite (csName));
- output.Write (wService.Program);
- output.Close ();
- return csName;
- }
- public override Type GetCompiledType ()
- {
- sourceFile = GenerateSourceFile (wService);
- CachingCompiler compiler = new CachingCompiler (this);
- CompilationResult result = new CompilationResult ();
- if (compiler.Compile (result) == false)
- throw new CompilationException (result);
-
- Assembly assembly = Assembly.LoadFrom (result.OutputFile);
- Type [] types = assembly.GetTypes ();
- Type type = types [0];
- if (type.FullName != wService.ClassName)
- throw new ApplicationException (String.Format (
- "Class={0}, but the class compiled is {1}",
- wService.ClassName,
- type.FullName));
-
- result.Data = type;
- return type;
- }
- public override string Key {
- get {
- return wService.PhysicalPath;
- }
- }
- public override string SourceFile {
- get {
- return sourceFile;
- }
- }
- }
- }
|