views:

53

answers:

0

I tried to create an ApplicationHost. But I had errors like SerializationException and FileNotFoundException.

Then I found this blog entry, where it's seem to be a remoting problem. In my little application I use the CallContext, so I tried some approaches. When I empty the CallContext before I create the ApplicationHost, it works:

Programm class:

namespace ApplicationHostDemo
{
    public class Program
    {

    public static void Main(string[] args)
    {

        Evil evil = new Evil();
        CallContext.SetData(Evil.CALLCONTEXT, evil);
        CallContext.FreeNamedDataSlot(Evil.CALLCONTEXT);

        Console.WriteLine("Simple Host-Demo\r\n");
        Host host = CreateHost();

        CallContext.SetData(Evil.CALLCONTEXT, evil);
        host.ProcessRequest("Index.aspx");

        Console.WriteLine("\r\n\r\nSimple Host-Demo end");
        Console.ReadLine();
    }

    public static Host CreateHost()
    {
        return (Host)ApplicationHost.CreateApplicationHost(typeof(Host), "/", Directory.GetCurrentDirectory());
    }

    public class Host : MarshalByRefObject
    {
        public void ProcessRequest(string page)
        {
            SimpleWorkerRequest swr = new SimpleWorkerRequest(page, "", Console.Out);
            HttpRuntime.ProcessRequest(swr);
        }
    }
}

}

Evil class:

namespace ApplicationHostDemo
{
    [Serializable]
    public class Evil : ILogicalThreadAffinative
    {
        public const string CALLCONTEXT = "evil";

        public string Name { get; set; }
    }
}

Do you know or could you explain why it works?