@Ed, Вы могли бы думать о чем-то как catch(...)
, который ловит неуказанное исключение в C++.
, Но finally
код, который будет выполнен, неважно, что происходит в эти catch
блоки.
Microsoft имеет страницу справки на попытка наконец C#
Путь, по которому вы пытаетесь пойти, по сути загружает файлы ASPX из какого-то другого механизма хранения, кроме файловой системы веб-сервера . Вы начали реализовывать часть этого, но на самом деле вам даже не нужен специальный HttpHandler для этого - ASP.NET имеет существующий механизм для указания других источников фактической разметки ASPX.
Он называется ] VirtualPathProvider , и это позволяет вам поменять функциональность по умолчанию для загрузки файлов с диска, скажем, загрузив их с SQL Server или где-нибудь еще. Затем вы можете воспользоваться всеми преимуществами встроенной компиляции и кэширования, которые ASP.NET использует самостоятельно.
Ядро функциональности входит в метод GetFile и VirtualFile's Open ( ) :
public override VirtualFile GetFile(string virtualPath)
{
//lookup ASPX markup
return new MyVirtualFile(aspxMarkup);
}
//...
public class MyVirtualFile : VirtualFile
{
private string markup;
public MyVirtualFile(string markup)
{
this.markup = markup;
}
public override Stream Open()
{
return new StringReader(this.markup);
}
}
Обратите внимание, что сегодня использование настраиваемого VirtualPathProvider требует полного доверия. Однако скоро будет доступен ASP.NET 4.0, поддерживающий VPP при среднем уровне доверия.
s Open () :public override VirtualFile GetFile(string virtualPath)
{
//lookup ASPX markup
return new MyVirtualFile(aspxMarkup);
}
//...
public class MyVirtualFile : VirtualFile
{
private string markup;
public MyVirtualFile(string markup)
{
this.markup = markup;
}
public override Stream Open()
{
return new StringReader(this.markup);
}
}
Обратите внимание, что сегодня использование настраиваемого VirtualPathProvider требует полного доверия. Однако скоро будет доступен ASP.NET 4.0, поддерживающий VPP при среднем уровне доверия.
s Open () :public override VirtualFile GetFile(string virtualPath)
{
//lookup ASPX markup
return new MyVirtualFile(aspxMarkup);
}
//...
public class MyVirtualFile : VirtualFile
{
private string markup;
public MyVirtualFile(string markup)
{
this.markup = markup;
}
public override Stream Open()
{
return new StringReader(this.markup);
}
}
Обратите внимание, что сегодня использование настраиваемого VirtualPathProvider требует полного доверия. Однако скоро будет доступен ASP.NET 4.0, поддерживающий VPP при среднем уровне доверия.
Один из способов сделать это - создать подкласс VirtualPathProvider и установить его как HostingEnvironment.VirtualPathProvider, вызвав HostingEnvironment.RegisterVirtualPathProvider . Вам придется переопределить несколько методов. Самый важный из них - GetFile (). Система сборки позаботится о кешировании.