Post

Developing portable ASP.NET apps, part deux

Recently, I developed a website for a client using ASP.NET 2.0, along with the fantastic MonoRail framework. I’ll be posting more on MonoRail in the future, but to put it in a nutshell, Monorail is an MVC web framework similar to Ruby on Rails. Its a very productive, intuitive and easily testable way to develop web applications. If you have not seen or used MonoRail, you owe it to yourself to go check it out.

What I found was that the application I developed worked perfectly when I ran it locally. However, as soon as I uploaded it to the host (crystaltech.com), I couldnt load any page in the application. It errored out with a very cryptic ‘SecurityException’ with the message ‘That assembly does not allow partially trusted callers’.

Naturally, this was a permission issue, since it worked on my dev environment, but what was it, and where do I start? After some back and forth with their support staff, I was able to figure out that crystaltech.com runs their .NET 2.0 servers under a medium trust level, instead of the full trust that .NET 1.1 ran under.

So, in my local web.config, I was able to put the line:

1
2
3
<system.web>
    <trust level="Medium" />
</system.web>

Immediately, I saw the same behaviour locally as I did on the crystaltech servers. Again, this goes back to developing software using the principle of least responsibility. As security becomes more and more of an issue, I think we as developers owe it to ourselves and our clients to make sure that the software we develop will run in a security-conscious environment.

I’ve set the trust level to medium in my machine.config file on my VS2005 VM to insure that I dont get bit by this again.

Ultimately, the issue centered around a strong-named assembly calling into the ConfigurationSettings API, which has had a lot of security enhancements in the .NET 2.0 framework. I was able to get the application running by removing the strong name from the affected assemblies, however, Im not sure of the implications of this.

This post is licensed under CC BY 4.0 by the author.