views:

84

answers:

2

I would like to know, if i can store the zip files of Plist and Images in the AppFabric cache? If yes, how? Do we need to covert the zip files to binary format or some other format, so that it can be stored in the App Fabric.

I am looking at storing the entire zip content in the AppFabric cache , so that the performance and the scalibility of my application improves.

I am developing my web service in .net c#.

+1  A: 

Yes, you can store these files in AppFabric - the restriction for storing objects in AppFabric is that they are serialisable (or serializable if you're in the USA :-)). How do you turn a file into a serialisable object? You turn it into bytes - here's an example that allows you to upload zip files with a web page.

<asp:FileUpload runat="server" ID="ZipFileUpload" /><br />
<asp:Button runat="server" ID="UploadButton" Text="Upload file to AppFabric" OnClick="UploadButton_Click" />
<hr />
<asp:GridView runat="server" AutoGenerateColumns="false" ID="CachedZipFilesGridview">
    <Columns>
        <asp:BoundField DataField="Key" />
    </Columns>
</asp:GridView>

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            bindGrid();
        }
    }

    protected void UploadButton_Click(object sender, EventArgs e)
    {
        DataCacheFactory factory;
        DataCache zipCache;
        Byte[] zipArray;

        // Check to see if the user uploaded a zip file
        if (ZipFileUpload.HasFile && ZipFileUpload.PostedFile.FileName.EndsWith(".zip"))
        {
            // Initialise the byte array to the length of the uploaded file
            zipArray = new Byte[ZipFileUpload.PostedFile.ContentLength];

            // Read the uploaded file into the byte array
            ZipFileUpload.PostedFile.InputStream.Read(zipArray, 0, ZipFileUpload.PostedFile.ContentLength);

            factory = new DataCacheFactory();

            // Get the "files" cache
            zipCache = factory.GetCache("files");

            // Add the byte array to the zipfiles region of the cache
            // Using regions allows us to separate out images and zips
            zipCache.Add(ZipFileUpload.PostedFile.FileName, zipArray,new TimeSpan(1,0,0), "zipfiles");

            bindGrid();
        }
    }

    protected void bindGrid()
    {
        DataCacheFactory factory;
        DataCache zipCache;
        IEnumerable<KeyValuePair<string, object>> cachedFiles;
        DataTable cachedFilesDataTable;

        factory = new DataCacheFactory();

        zipCache = factory.GetCache("files");

        cachedFiles = zipCache.GetObjectsInRegion("zipfiles");

        cachedFilesDataTable = new DataTable();
        cachedFilesDataTable.Columns.Add(new DataColumn("Key", typeof(string)));

        foreach (KeyValuePair<string, object> cachedFile in cachedFiles)
        {
            cachedFilesDataTable.Rows.Add(cachedFile.Key);
        }

        CachedZipFilesGridview.DataSource = cachedFilesDataTable;
        CachedZipFilesGridview.DataBind();
    }
}
PhilPursglove
A: 

if the content of the zip files and images are not created dynamically why not use iis cache for caching these files. File Cache (IIS 6.0)

kazim mehdi