Latest Entries »
Fixed a null reference error and added a channel count.
Added a COM port form.
The problem was that the Central Authentication Service (CAS) would invalidate the session tokens after 8 hours. And since most people start at 08h00, the problem would only manifest after 16h00. At this point, the authentication system and the response filter started a tug o’ war – the authentication system trying to redirect the response to the login page and the response filter trying to flush the filtered response back to the client.
Special thanks to Mike D for figuring it out, without even looking at a single line of code… I had to hand over one of my hats.
The solution was simple – to bypass the filter if the response is being redirected (301), line 11:
public class WebApplication : System.Web.HttpApplication
{
public WebApplication()
{
ReleaseRequestState += new EventHandler(OnReleaseRequestState);
}
void OnReleaseRequestState(object sender, EventArgs e)
{
// Ensure that the request is not being redirected before applying the filter
if (HttpContext.Current.Response.StatusCode == (int)HttpStatusCode.Redirect)
return;
// Install the filter
var response = HttpContext.Current.Response;
var request = HttpContext.Current.Request;
response.Filter = new SecurityFilterStream(response.Filter, request);
}
}
From MSDN:
In the .NET Framework version 3.5 and earlier versions, if you loaded an assembly from a remote location, the assembly would run partially trusted with a grant set that depended on the zone in which it was loaded. […] If you try to run that assembly in the .NET Framework version 4 and later versions, an exception is thrown; you must either explicitly create a sandbox for the assembly, or run it in full trust.
So I added the following to app.config to get it working again:
<configuration>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
