Here's another embeddable web console: a Boo interpreter. You enter some code, hit the Execute button and it compiles and runs the code. You get access to all of the assemblies in your app.
I use this to run short ad-hoc "queries" against a running web app, like:
- Is this thing in the cache?      
 print (context.Cache["pepe"] == null) 
- Do I have all httpmodules correctly registered?       
 import System.Web for s in context.ApplicationInstance.Container.ResolveAll(typeof(IHttpModule)): print s 
- Checking performance counters:      
 import System.Diagnostics pc = PerformanceCounterCategory("ASP.NET") for counter in pc.GetCounters(): print counter.CounterName, counter.NextValue()
- Or even running some NHibernate query (although I'd prefer using the NHibernate web console):       
 import NHibernate sf = context.ApplicationInstance.Container.Resolve(typeof(ISessionFactory)) using s = sf.OpenSession(): users = s.CreateQuery("from User order by newid()").SetMaxResults(5).List() for u in users: print u.Id
Why Boo? Because it's pretty much the perfect .net scripting language to embed: small (this console with boo merged in is about 1.9MB), type inference, duck typing, low-ceremony syntax.
Setup:
- Put BooWebConsole.dll in your app's bin directory
- Add it to your web.config's <httpHandlers> section:      
 <add verb="*" path="boo/*" validate="false" type="BooWebConsole.ControllerFactory, BooWebConsole"/> 
-      Visit /boo/index.ashx 
Notes:
- Unlike booish, this console is stateless. Each http request creates a new interpreter, it doesn't remember anything you executed in previous requests.
- Since the code is compiled and run within the main AppDomain, this will leak memory. Not a big deal in a dev environment though. But putting this in a production site is pretty much suicidal.
- In case it isn't obvious: this is not meant to replace proper testing.
UPDATE: it's now also available on NuGet
 
No comments:
Post a Comment