Posted
about 1 year
ago
by
Jason Whitehorn
Developing an open source project is a very rewording experience. But sadly (as an
open source developer that is) open source projects rarely get the feedback they deserve.
Often the developers only hear feedback from their users when their
... [More]
software is broken,
because of this it is often difficult to know when an author's work is truly appreciated.
Fortunately the Community Coding Contest is
an attempt to spot light open source projects, and at the same time give a little
something back to the contributors of those projects. Please check out aspNETserve's
listing in the Community Coding Contest and if you find aspNETserve as useful
as I hope you do, then please vote for it. [Less]
Posted
about 1 year
ago
by
Jason Whitehorn
Just a quick update, a new version of aspNETserve has
been release. Version 1.3.1 represents a point release containing general bug fixes,
and is recommended for all users.
Posted
about 1 year
ago
by
Jason Whitehorn
The topic has come up many times, and that is "Why do I have to register aspNETserve.Core.dll
in the GAC to run aspNETserve?". The answer to this question has to do with how aspNETserve
uses the ASP.NET hosting facilities, so first some
... [More]
background information.
Background
aspNETserve internally makes use of the System.Web.Hosting namespace
to manage AppDomains. Internal to aspNETserve is a class called DomainHook in
the aspNETserve.Core namespace. When aspNETserve requests an AppDomain to be created
it requests that a DomainHook be instantiated inside that AppDomain so that some level
of interaction can occur between the two domains. This interaction is primarily focused
around the processing of ASP.NET requests.
The only snag to this whole process is the method that aspNETserve uses to create
the AppDomains, ApplicationManager.CreateObject,
makes you specify the physical path to the ASP.NET application. As it turns out the
physical path is also used for the BaseDirectory property
of the AppDomain to specify/limit which paths to probe for DLL resolution. This is
precisely where the GAC requirement comes from.
Since the hosted web application probably does not contain aspNETserve.Core.dll in
its bin directory, then the only other way to successfully load that assembly, to
instantiate the DomainHook type, is by placing the assembly in the GAC.
Solution
Currently aspNETserve has an
open task of officially finding a work around to the above described scenario
that removes the GAC installation requirement. However, in the interim, a quick and
easy solution is to simply place the aspNETserve.Core assembly in the bin directory
of the web site you wish to host. While not elegant by any means, it is something. [Less]
Posted
about 1 year
ago
by
Jason Whitehorn
As I mentioned in my
last post, aspNETserve 1.3
has just been released. And with it comes some exciting changes. Here is an outline
of some of the most notable changes:
HTTP Persistent
Connections
aspNETserve's goal
... [More]
is to target version 1.1 of the HTTP protocol, and prior to version
1.3 of aspNETserve it had an obvious shortcoming in that goal. It did not even attempt
to keep "Keep-Alive" (aka, persistent) connections around. The server naively closed
the connection after each request.
The new aspNETserve.Server object in version 1.3 has full support for persistent connections,
and with it introduces a couple of new properties:
MaxConnections
This property represents the maximum number of simultaneous connections allowed. Once
the maximum amount has been reached additional requests will be declined.
KeepAliveRequestTimeout
A period of time (in milliseconds) that aspNETserve will wait for subsequent communications
on a previously established connection.
Windows
Service Server
A Windows service called aspNETserve.Ice (pun
intended) allows aspNETserve to process requests in the background. Additionally,
this allows request processing without a user having to first login and launch the
SimpleServer UI.
aspNETserve.Ice reads it configuration from an XML file whose schema is define on
the wiki page ConfigSchemaOverview.
Here is a simple example of what the XML file looks like:
<?xml version="1.0" encoding="utf-8"?>
<server xmlns="http://aspnetserve.googlecode.com/svn/tags/Release 1.3/aspNETserve/Configuration/Xml/aspNETserve.config.xsd">
<application physicalPath="c:\temp">
<domain name="www.example.com" virtualPath="/" />
<endpoint ip="127.0.0.1" port="80" />
<endpoint ip="127.0.0.1" port="443" secure="true" />
</application>
</server>
Packaging
Abilities
Perhaps the most exciting new feature is the ability to distributed packaged web application.
Essentially this allows you to ZIP up your entire web site and distribute one single
file, instead of dozens (or even hundreds). Web Application Packages (WAPs), as they
are called, are described in detail on their
wiki page.
Currently on the SimpleServer supports WAPs, so this means that aspNETserve.Ice is
left out of this feature. Fortunately, for those consuming the aspNETserve API, nothing
prevents you from incorporating this feature into your own application. The best place
to start learning about the semantics of WAPs is in the SimpleServer UI itself.
With any luck the next milestone for aspNETserve will be version 1.3.1, currently
scheduled to be released sometime before October 31st, 2008. [Less]
Posted
about 1 year
ago
by
Jason Whitehorn
Its late, so this will be a short post.
Version 1.3 of aspNETserve has
just been released. It can be downloaded from http://code.google.com/p/aspnetserve/downloads/list.
Version 1.3 has several important enhancements and bug
... [More]
fixes. In a future post (hopefully
in a day or so) I will go into detail of all the changes, but for now there is always
the release
1.3 ticket view on the project's issue tracer.
Enjoy. [Less]