В настоящее время я работаю с сайтом выделенного сервера, но в будущем хочу расширить его с помощью облачной платформы Microsoft Azure, но я не уверен, будет ли определенная часть моего кода работать на Azure.
Сайт состоит из галереи предметов с изображением каждого предмета.
Изображения хранятся в базе данных sqlserver.
Я создал обработчик http, который кэширует изображения на диск и перенаправляет запрос на изображение (как показано в конце сообщения).
Изображения сохраняются в виртуальном каталоге под названием «imagecache» в моем приложении ASP.NET. (т.е. ~ / imagecache /).
Поскольку веб-приложение будет работать во многих экземплярах виртуальной машины на платформе Azure, изображения должны будут совместно использоваться экземплярами, верно?
Итак, мой вопрос на самом деле: каков наилучший способ достижения того, что у меня уже есть, совместимого с лазурью?
Спасибо
Код изображения .. .. 1015 *
public class getimage : IHttpHandler {
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public void ProcessRequest (HttpContext context) {
try
{
string uniqueid = "";
if(context.Request.QueryString["id"]) uniqueid = context.Request.QueryString["id"].ToString();
string dir = "~/imagecache/";
string image_target_path = dir + "image-file-" + uniqueid + ".png";
byte[] data = null;
context.Response.ContentType = "image/png";
if (!System.IO.File.Exists(context.Server.MapPath(image_target_path)))
{
if (context.Request.QueryString["id"] != null)
{
// get image data from the database
data = ImageHelper.getDatabaseImageDataByID(Convert.ToInt32(uniqueid));
using (System.Drawing.Image img = System.Drawing.Image.FromStream(new System.IO.MemoryStream(data)))
{
// save image to disk in the virtual dir
img.Save(context.Server.MapPath(image_target_path));
}
}
else
{
// set a sample image if no id is set
image_target_path = "~/images/noimage.png";
}
}
// redirect request to image file
context.Response.Redirect(image_target_path, false);
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
}
}
public bool IsReusable {
get {
return false;
}
}
}