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.
- 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"/>
- 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