Bücher online kostenlos Kostenlos Online Lesen
Cloud Computing Anbietervergleich

Cloud Computing Anbietervergleich

Titel: Cloud Computing Anbietervergleich Kostenlos Bücher Online Lesen
Autoren: Mario Meir-Huber
Vom Netzwerk:
Message abholen, so gibt es einiges zu beachten. Eine Message, die abgeholt wird, wird für eine gewisse Zeit unsichtbar gemacht. Das verhindert, dass eine Mitteilung mehrmals bearbeitet wird. Die Unsichtbarkeit einer Nachricht erlischt jedoch nach einer gewissen Zeit wieder, daher ist es nötig, bearbeitete Nachrichten aus der MessageQueue zu löschen ( Listing 1.7 ).
    public CloudMessage TopMessage
{
get
{
CloudQueueMessage queuemsg = queue.
GetMessage();

if (queuemsg == null) return null;

CloudMessage msg = CloudSerializer.
SerializeFromString(queuemsg.AsString);
queue.DeleteMessage(queuemsg);
return msg;
}
}
    Listing 1.7: CloudMessage abholen
    Nachdem die wichtigsten Punkte zum Thema Messaging abgehandelt wurden, geht es nun an den TableService . Zuerst muss eine Klasse definiert werden, die eine Reihe in der Tabelle repräsentiert. Hierbei spricht man von Entitäten. Entitäten enthalten neben dem PartitionKey und dem RowKey , die der Identifizierung dienen, weitere benutzerdefinierte Elemente. Für die aktuelle Entität werden die drei Eigenschaften ImageName , ImageText und ImageUrl verwendet. Als Partition wird standardmäßig das Datum angegeben, als RowKey eine GUID ( Listing 1.8 ).
    {
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.WindowsAzure.StorageClient;

public class ImageEntity : TableServiceEntity
{
public ImageEntity()
: this(DateTime.Now.ToShortDateString(), Guid.
NewGuid().ToString())
{

}

public ImageEntity(string partitonKey, string
rowKey)
: base(partitonKey, rowKey)
{
}

public string ImageName { get; set; }

public string ImageText { get; set; }

public string ImageUrl { get; set; }
}
}
    Listing 1.8: Entitäten
    Die Entitäten, die in Listing 1.8 erstellt wurden, müssen nun verarbeitet werden, dafür gibt es den TableServiceContext . Die Klasse ImageServiceContext erbt von dieser Klasse und stellt die beiden Methoden TableName und Images zur Verfügung. Die Methode Images liefert ein IQueryable zurück und erlaubt es somit, LinQ-Abfragen auf die Entitäten auszuführen. LinQ steht für „Language integrated Query“ und bietet eine SQL-ähnliche Syntax auf Objekte. Somit kann man Abfragen absetzen, die folgendermaßen aussehen: from images in service.Images where images.PartitionKey = „24.08.2010“ select images . In diesem speziellen Fall würden alle Bilder, die in der Partition „24.08.2010“ sind, zurückgeliefert. Der ImageServiceContext ist in Listing 1.9 dargestellt.
    namespace TableService
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.WindowsAzure.StorageClient;
using Microsoft.WindowsAzure;

public class ImageServiceContext : TableServiceContext
{
private const string tableName = "Images";

public ImageServiceContext(string baseAddress,
StorageCredentials credentials)
: base(baseAddress, credentials)
{
}

public IQueryable Images
{
get
{
return CreateQuery(tableName);
}
}

public static string TableName
{
get
{
return tableName;
}
}
}
}
    Listing 1.9: Der Kontext für den Service
    Wichtig ist auch noch, dass eine Datenquelle für die Asp.NET-Anwendung zur Verfügung steht. Hier werden die vorher erstellten Entitäten über den ImageServiceContext eingebunden.
    private CloudStorageAccount account;
private ImageServiceContext imagesContext;
((Beschreibung der Blobs))
    Listing 1.10: Felder der Datenquelle
    Im Konstruktor der Klasse werden sowohl der Account als auch der Kontext für die Entitäten gesetzt. Sollte die Tabelle noch nicht existieren, wird sie über den CloudTableClient mithilfe der Funktion CreateTableIfNotExist erstellt. Die Funktion CreateTableIfNotExist überprüft vorher, ob die Tabelle vorhanden ist. Ist das nicht der Fall, wird sie erstellt ( Listing 1.11 ).
    account = CloudStorageAccount.
DevelopmentStorageAccount;
imagesContext = new ImageServiceContext(account.
TableEndpoint.ToString(), account.Credentials);
CloudTableClient client = account.
CreateCloudTableClient();
client.CreateTableIfNotExist(
ImageServiceContext.TableName);
    Listing 1.11: Konstruktor der Klasse
    Schlussendlich soll eine Entität in eine Tabelle persistiert werden. Hierfür ist es zum einen notwendig, dass eine Entität erstellt wird. Die Eigenschaften werden mit den zuständigen Werten definiert und über die Kontextklasse mit der Methode AddObject hinzugefügt. Die Daten werden schließlich über den Aufruf SaveChanges abgespeichert. In diesem

Weitere Kostenlose Bücher