Holger Sirtl's WebLog

Microsoft's Cloud Technology applied in Enterprise Architecture

  • Holger Sirtl's WebLog

    Video-Reihe zu Windows Azure – Folge 2: Was ist der Windows Azure Access Control Service?

    • 0 Comments

    Nach meinem ersten Video zu Windows Azure möchte ich meine Video-Reihe mit einem weiteren Azure Service fortsetzen: dem Windows Azure Access Control Service. Auch hier bin ich wieder unter der Zeitgrenze von 10 Minuten geblieben.

    Hier das Video: Was ist der Windows Azure Access Control Service [09:54 Min.]

    Aus meiner Sicht wird am Windows Azure Access Control Service (ACS) das Konzept von Platform-as-a-Service besonders schön deutlich. Mit dem ACS können eigene Anwendungen gezielt um Claims-basierte Zugriffskontrolle erweitert werden. Leicht können Authentifizierungsmechanismen wie Windows Live ID, Facebook ID, Google ID, Yahoo ID, Open ID und Active Directory Federation Services genutzt werden. Wie eine solche Anwendung aussehen kann, zeige ich in dem Video. Viel Spaß beim Schauen.

    Weitere Informationen

  • Holger Sirtl's WebLog

    Blog-Empfehlung: Windows Azure Access Control Service zur Authentifizierung bei SharePoint 2010

    • 0 Comments

    Gerade habe ich eine Empfehlung zu einem Blog-Post bekommen, die ich gerne weiterleiten möchte:

    Visual Guide to Azure Access Control Service Authentication with SharePoint 2010 von Wictor Wilén.

    Darin beschreibt Wictor Wilén Schritt für Schritt die Konfiguration des Windows Azure Access Control Service zum Einsatz als Authentifizierungsmechanismus für SharePoint 2010. Die Schritte im einzelnen sind dabei:

    1. Konfiguration des Azure ACS
      1. Initialisierung des ACS
      2. Identity Provider
      3. Relying Party
      4. Regelgruppen
      5. Zertifikate
    2. Konfiguration des SharePoint Servers
      1. Trusted Root Authority
      2. Trusted Identity Provider
    3. Test des Gesamtsystems

    Weitere Informationen

  • Holger Sirtl's WebLog

    Video-Reihe zu Windows Azure – Folge 1: Was ist Windows Azure?

    • 0 Comments

    In den nächsten Wochen möchte ich eine kleine Video-Reihe produzieren. Dabei werde ich auf verschiedene Aspekte rund um Cloud Computing und Windows Azure behandeln. Jedes Video soll dabei eine maximale Länge von 10 Minuten haben.

    Und los geht’s mit einem ersten Video, in dem ich die Frage beantworte “Was ist Windows Azure?”. In knapp 10 Minuten erkläre ich darin, welche Dienste in Windows Azure vorhanden sind und wie sich die Ausführung eigener Cloud Services auf Azure gestaltet. Feedback natürlich willkommen.

    Hier geht’s zum Video

    Weitere Informationen

  • Holger Sirtl's WebLog

    Jetzt produktiv verfügbar: SQL Azure Import/Export Service

    • 0 Comments

    Die Windows Azure Produktgruppe hat bekanntgegeben, dass ab sofort der SQL Azure Import/Export Service allgemein produktiv verfügbar ist. Mit diesem Dienst ist es sehr leicht möglich, bestehende lokal betriebene Datenbanken leicht in die Cloud auf SQL Azure zu bringen und existierende SQL Azure und SQL Server Datenbanken problemlos im Windows Azure Blob Storage zu archivieren.

    Mit der Produktivsetzung des SQL Azure Import/Export Service werden auch einige Verbesserungen am Dienst verfügbar:

    Der Dienst steht kostenlos zur Verfügung. Es fallen lediglich die üblichen Kosten für Datentransfer und Blob Storage (für die Ablage der archivierten Datenbanken) an.

    Weitere Informationen

  • Holger Sirtl's WebLog

    Windows Azure Blob Storage leicht gemacht – Schritt für Schritt zu einer kleinen Beispielanwendung

    • 0 Comments

    Erstaunlicherweise gibt es für Windows Azure Blob Storage kaum leicht verdauliche Beispielanwendungen, die zeigen, wie man leicht auf diesen hoch-skalierbaren, hoch-verfügbaren Cloud Storage zugreifen kann. Diesem Mangel möchte ich mit diesem Blog-Artikel beseitigen.

    In den folgenden Schritten soll eine kleine Beispielanwendung erstellt werden, mit deren Hilfe Dokumente in Blob Storage geschrieben, von dort ausgelesen, tabellarisch aufgelistet und auch wieder gelöscht werden können. Der Sourcecode der fertigen Solution steht unten zum Download zur Verfügung. Des weiteren können auch Videos, die ich beim Erstellen der Anwendung gedreht habe heruntergeladen werden:

    Die Beispielanwendung geht davon aus, dass Sie ein Cloud Projekt wie in einem meinem letzten Blog-Posts beschrieben angelegt haben.

    Öffnen Sie – durch Doppelklick auf die Web Role – die Konfigurationsseite der Web Role. Es erschein die in Abbildung 1 gezeigte Eingabemaske.

    image

    Abbildung 1: Konfiguration des Storage Accounts (Development Storage)

    Geben sie in dieser Maske die in Tabelle 1 aufgelisteten Parameter ein und speichern Sie die WebRole.

    ParameterWertErläuterung
    WAStorageConnectionString UseDevelopmentStorage=true Definiert den zu verwendenden Storage Account. Für Testzwecke kann auch (wie hier) der Development Storage verwendet werden.
    WAContainerName democontainer Name des Containers im Storage Account. Beachten Sie, dass der Name nur aus Kleinbuchstaben bestehen darf.

    Tabelle 1: Parameter für den Storage Account und die Tabelle

    Öffnen Sie nun die Datei Global.asax.cs. Fügen Sie am Anfang der Datei Referenzen auf folgende Namespaces hinzu:

    ...
    
    using Microsoft.WindowsAzure;
    
    using Microsoft.WindowsAzure.ServiceRuntime;
    
    using Microsoft.WindowsAzure.StorageClient;´
    
    ...

    Damit machen Sie dem Programm Klassen zum Zugriff auf die Service-Konfiguration sowie den Windows Azure Storage zugänglich.

    Erweitern Sie nun die Methode Application_Start wie im folgenden Listing angegeben.

    void Application_Start(object sender, EventArgs e)
    
    {
    
        CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
    
        {
    
            configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
    
        });
    
    
    
        var account = 
    
            CloudStorageAccount.FromConfigurationSetting("WAStorageConnectionString");
    
    
    
        var container = account.CreateCloudBlobClient().GetContainerReference(
    
            RoleEnvironment.GetConfigurationSettingValue("WAContainerName"));
    
        container.CreateIfNotExist();
    
    
    
        var permissions = container.GetPermissions();
    
        permissions.PublicAccess = BlobContainerPublicAccessType.Container;
    
        container.SetPermissions(permissions);
    
    }

    Legen Sie im Hauptverzeichnis des Projekts einen Ordner Model an und fügen sie diesem eine neue Klassendatei Image.cs hinzu. Implementieren Sie die Klasse wie folgt:

    namespace WebRole
    
    {
    
        public class Image
    
        {
    
            public string Title { get; set; }
    
            public string FileName { get; set; }
    
            public string Description { get; set; }
    
            public string Tags { get; set; }
    
            public string ImageUri { get; set; }
    
            public long Size { get; set; }
    
        }
    
    }

    Über diese Klasse werden später Blob-Objekte instanziiert und dient als Basis für die Datenquelle, die über die Oberfläche für die Blob-Zugriffe angesprochen wird. Sie definiert die für Blobs benötigten Attribute.

    Legen Sie mit der Klasse ImageDataSource nun die entsprechende Datenquelle an und implementieren Sie die Klasse wie folgt:

    using System;
    
    using System.Collections.Generic;
    
    using Microsoft.WindowsAzure.StorageClient;
    
    using Microsoft.WindowsAzure;
    
    using Microsoft.WindowsAzure.ServiceRuntime;
    
    using System.Collections.Specialized;
    
    
    
    namespace WebRole
    
    {
    
        public class ImageDataSource
    
        {
    
            private CloudBlobContainer container = null;
    
    
    
            public ImageDataSource()
    
            {
    
                var account = 
    
                    CloudStorageAccount.FromConfigurationSetting("WAStorageConnectionString");
    
                var client = account.CreateCloudBlobClient();
    
    
    
                container = client.GetContainerReference(
    
                    RoleEnvironment.GetConfigurationSettingValue("WAContainerName"));
    
            }
    
    
    
            public Uri Insert(string title, string description, string tags,
    
                              string fileName, string contentType, byte[] data)
    
            {
    
                var blob = container.GetBlobReference(fileName);
    
                blob.Properties.ContentType = contentType;
    
    
    
                var metadata = new NameValueCollection();
    
                metadata["FileName"] = fileName;
    
                metadata["ImageTitle"] = title;
    
                metadata["Description"] = description;
    
                metadata["Tags"] = tags;
    
    
    
                blob.Metadata.Add(metadata);
    
                blob.UploadByteArray(data);
    
    
    
                return blob.Uri;
    
            }
    
    
    
            public IEnumerable<Image> Select()
    
            {
    
                var imageList = new List<Image>();
    
                var blobList = container.ListBlobs(new BlobRequestOptions());
    
    
    
                foreach (CloudBlob blob in blobList)
    
                {
    
                    blob.FetchAttributes();
    
    
    
                    var image = new Image()
    
                    {
    
                        ImageUri = blob.Uri.ToString(),
    
                        Title = blob.Metadata.Get("ImageTitle"),
    
                        FileName = blob.Metadata.Get("FileName"),
    
                        Description = blob.Metadata.Get("Description"),
    
                        Tags = blob.Metadata.Get("Tags"),
    
                        Size = blob.Properties.Length
    
                    };
    
    
    
                    imageList.Add(image);
    
                }
    
    
    
                return imageList;
    
            }
    
    
    
            public void Delete(string ImageUri)
    
            {
    
                var blob = container.GetBlobReference(ImageUri);
    
                blob.DeleteIfExists();
    
            }
    
        }
    
    }

    Die Klasse stellt also alle Methoden bereit, die zum Auslesen, Hinzufügen und Löschen von Blobs benötigt werden. Kompilieren Sie nun das Projekt. Dies ist wichtig, da andernfalls die Klasse später nicht Auswahl als Datenquelle für den GridView angeboten wird.

    Öffnen Sie nun die Datei Default.aspx. Fügen Sie der Datei ein GridView hinzu, indem sie ein entsprechendes Element aus der Toolbox auf die Datei ziehen. Die Datei sollte dann wie in Abbildung 2 gezeigt aussehen.

    image

    Abbildung 2: Hinzufügen eines GridView-Controls und Auswahl der Datenquelle

    Bestimmen Sie nun im Kontextmenü des GridViews (zu sehen in Abbildung 2) die Datenquelle. Wählen Sie den Menüpunkt Choose Data Source / New data source. Es erscheint die in Abbildung 3 gezeigte Eingabemaske.

    image

    Abbildung 3: Auswahl einer ObjectDataSource

    Wählen Sie hier als Datenquelle Object und benennen die Datenquelle mit ObjectDataSource. Bestätigen Sie Ihre Eingabe mit OK. Es erscheint die in Abbildung 4 gezeigte Eingabemaske.

    image

    Abbildung 4: Auswahl des Business Objekts

    Wählen Sie hier als Business-Objekt die Klasse WebRole.ImageDataSource und bestätigen Sie Ihre Eingabe mit Next.

    image

    Abbildung 5: Auswahl der Business Methoden für Auswahl und Löschen

    Bestimmen Sie nun die Methoden für die einzelnen Datenoperationen, d.h. für die Operation Select die Methode Select(), für Insert die Methode Insert() usw. Schließen Sie Ihre Eingabe mit Finish ab. Mit diesen Eingaben stehen dem GridView alle Informationen für die Anzeige der Kontaktdaten zur Verfügung. Wenn Sie im Kontextmenü des GridViews auch noch die Option EnableDeleting aus.

    Legen Sie im Code des GridView das Schlüsselattribut für einzelne Image-Objekte, ImageUri wie folgt fest:

    ...
    
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    
        <asp:GridView
    
            ID="GridView1"
    
            runat="server"
    
            AutoGenerateColumns="False" 
    
            DataSourceID="ObjectDataSource"
    
            DataKeyNames="ImageUri">
    
    ...

    Konfigurieren Sie die Spalten des GridView wie folgt.

    ...
    
    <Columns>
    
        <asp:HyperLinkField DataNavigateUrlFields="ImageUri" DataTextField="FileName" 
    
            HeaderText="Filename" />
    
        <asp:BoundField DataField="Title" HeaderText="Title" 
    
            SortExpression="Title" />
    
        <asp:BoundField DataField="Description" HeaderText="Description" 
    
            SortExpression="Description" />
    
        <asp:BoundField DataField="Tags" HeaderText="Tags" SortExpression="Tags" />
    
        <asp:BoundField DataField="Size" HeaderText="Size" SortExpression="Size" />
    
        <asp:CommandField ShowDeleteButton="true"  />
    
    </Columns>
    
    ...

    Damit verlinken Sie beispielsweise den Namen des Blobs in der Spalte Filename mit dem eigentlichen Blob-Inhalt. Wenn sie also auf den Namen des Bildes klicken, wird das Bild selbst angezeigt.

    Konfigurieren Sie nun noch das Eingabeformular zum Upload von Blobs wie im folgenden Listing angegeben.

    ...
    
        </asp:ObjectDataSource>
    
        <br />
    
        <asp:Label ID="filePathLabel" Text="File Path:" runat="server" />
    
        <asp:FileUpload ID="imageFile" runat="server" />
    
        <br />
    
        <asp:Label ID="imageTitleLabel" Text="Image Title:" runat="server" />
    
        <asp:TextBox ID="imageTitle" runat="server" />
    
        <br />
    
        <asp:Label ID="imageDescriptionLabel" Text="Image Description:" runat="server" />
    
        <asp:TextBox ID="imageDescription" runat="server" />
    
        <br />
    
        <asp:Label ID="imageTagsLabel" Text="Image Tags:" runat="server" />
    
        <asp:TextBox ID="imageTags" runat="server" />
    
        <br />
    
        <br />
    
        <asp:Button ID="insertButton" Text="Submit" runat="server" 
    
                    OnClick="insertButton_Click" />
    
    </asp:Content>
    
    ...

    Damit ist die Programmierung der Oberfläche abgeschlossen. Es fehlt noch die Logik für die Default.aspx.cs. Implementieren Sie diese wie im folgenden Listing angegeben:

    using System;
    
    
    
    namespace WebRole
    
    {
    
        public partial class _Default : System.Web.UI.Page
    
        {
    
            private ImageDataSource dataSource = null;
    
    
    
            protected void Page_Load(object sender, EventArgs e)
    
            {
    
                dataSource = new ImageDataSource();
    
            }
    
    
    
            protected void insertButton_Click(object sender, EventArgs e)
    
            {
    
                if (imageFile.HasFile)
    
                {
    
                    dataSource.Insert(
    
                        imageTitle.Text,
    
                        imageDescription.Text,
    
                        imageTags.Text,
    
                        imageFile.FileName,
    
                        imageFile.PostedFile.ContentType,
    
                        imageFile.FileBytes
    
                    );
    
    
    
                    GridView1.DataBind();
    
                }
    
            }
    
        }
    
    }

    Starten Sie einen Testlauf, indem Sie den Menüpunkt Debug / Start Debugging auswählen. Nach einem kurzen Moment sollte die Startseite wie in Abbildung 6 zu sehen angezeigt werden.

    image

    Abbildung 6: Erstmalige Ausführung der Blob Storage Anwendung

    Da im Container noch keine Blobs liegen, wird nur das Eingabeformular, nicht jedoch das Grid angezeigt. Wählen Sie über den Button Browse eine Datei aus und vergeben Sie Titel, Beschreibung und Tags. Bestätigen Sie Ihre eingabe mit Submit. Nach erfolgreichem Upload sollte die GridView mit dem Blobeintrag wie in Abbildung 7 zu sehen angezeigt werden.

    image

    Abbildung 7: Anwendung, nachdem ein Bild hinzugefügt wurde

  • Holger Sirtl's WebLog

    Windows Azure Libraries für Java verfügbar (einschließlich Unterstützung für den Service Bus)

    • 2 Comments

    Die Microsoft Interoperability Group hat überarbeitete Libraries für Java veröffentlicht. Diese ermöglichen unter anderem auch den Zugriff auf die REST API, die vom Windows Azure Service Bus bereitgestellt wird.

    Die Windows Azure Libraries für Java können von GitHub heruntergeladen werden. Weitere Informationen finden sich im Windows Azure Java Developer Center.

    Auf MSDN finden sich für Java Entwickler darüber hinaus eine Reihe weiterer Artikel zur Verwendung der verschiedenen Azure Cloud-Services:

    Weitere Informationen

  • Holger Sirtl's WebLog

    Migration nach SQL Azure leicht gemacht mit dem “SQL Azure Compatibility Assessment”-Service

    • 0 Comments

    Für alle, die bislang an einer Migration in die Cloud interessiert waren, gab es nur den SQL Azure Migration Wizard, der Aufschluss darüber gab, ob die Migration einer SQL Server Datenbank nach SQL Azure möglich war bzw. welche Änderungen erforderlich waren.

    Seit dem 03. Januar 2012 steht nun ein neuer Online-Service bereit, der Reports zu geplanten Migrationsvorhaben geben kann: SQL Azure Compatibility Assessment. Dieser stellt Informationen zusammen, die wichtig für die Migration einer SQL Server Datenbank nach SQL Azure sind. Die Bedienung ist sehr leicht.

    Benötigt werden:

    • Eine Windows Live ID
    • Ein .dacpac Extrakt der bestehenden lokalen Datenbank

    Kenntnisse zu Azure sind darüber hinaus nicht erforderlich. Ergebnis eines Assessments ist ein Report, der alle Datenobjekte auflistet, die in SQL Azure nicht unterstützt werde bzw. Objekte, die für die Migration geändert werden müssen. Hier eine Beispielausgabe:

    SQLAssessment

    Eine .dacpac-Datei kann mit Hilfe der SQL Server Data Tools erstellt werden. Diese kann im Assessment-Portal hochgeladen werden. Das Portal gibt dann einen Überblick über alle Schema-Objekte, die in SQL Azure nicht unterstützt werden bzw. überarbeitet werden müssen.

    Weitere Informationen

  • Holger Sirtl's WebLog

    Veranstaltungshinweis: Windows Azure Bootcamp “Extend SharePoint”

    • 0 Comments

    Termin und Ort für das Windows Azure Bootcamp “Extend SharePoint” stehen nun fest:

    Am 13.03.2012 von 09:00Uhr bis 17:00Uhr dreht sich alles um die Kombination von SharePoint und Azure. Auf der Agenda stehen folgende Punkte:

    1. SQL Azure und SharePoint
      - SQL Azure Daten mittels externer Inhaltstypen und externer Listen bereitstellen
      - SQL Azure Daten in eigene SharePoint Benutzeroberflächen einbinden
    2. Azure WCF-Dienste und SharePoint
      - Azure WCF-Dienste in externen Inhaltstypen nutzen
      - Azure WCF-Dienste in eigenen SharePoint Benutzeroberflächen nutzen
    3. Windows Azure und SharePoint Ereignisempfänger
      - Kommunizieren mit einer Azure Worker-Rolle über eine Queue
    4. Windows Azure und SharePoint Workflows
      - Kommunizieren mit einer Azure Worker-Rolle über einen TCP-Endpoint
    5. Windows Azure und SharePoint Suche
      - Einbinden von Windows Azure Daten in die Federated Search

    Weitere Informationen und Möglichkeit zur Anmeldung gibt es hier:

    Eine Übersicht über alle Windows Azure Camps (also auch zu anderen Themen) gibt es hier.

  • Holger Sirtl's WebLog

    Windows Azure Table Storage leicht gemacht – Schritt für Schritt zu einer kleinen Beispielanwendung

    • 0 Comments

    Erstaunlicherweise gibt es für Windows Azure Table Storage kaum leicht verdauliche Beispielanwendungen, die zeigen, wie man leicht auf diesen hoch-skalierbaren, hoch-verfügbaren Cloud Storage zugreifen kann. Diesem Mangel möchte ich mit diesem Blog-Artikel beseitigen.

    In den folgenden Schritten soll eine kleine Beispielanwendung erstellt werden, mit deren Hilfe Einträge in Table Storage geschrieben, von dort ausgelesen, angezeigt und auch wieder gelöscht werden können. Der Sourcecode der fertigen Solution steht unten zum Download zur Verfügung. Des weiteren können auch Videos, die ich beim Erstellen der Anwendung gedreht habe heruntergeladen werden:

    Die Beispielanwendung geht davon aus, dass Sie ein Cloud Projekt wie in meinem letzten Blog-Post beschrieben angelegt haben. In einem Ersten Schritt müssen in diesem Projekt die Zugriffsinformationen für den Storage, d.h. die Account-Informationen und der Name der Tabelle hinterlegt werden. Klicken Sie hierzu im Solution Explorer doppelt auf die WebRole im Konfigurationsprojekt. Es erschein die in Abbildung 1 gezeigte Eingabemaske.

    image

    Abbildung 1: Konfiguration des Storage Accounts (Development Storage)

    Geben sie in dieser Maske die in Tabelle 1 aufgelisteten Parameter ein und speichern Sie die WebRole.

    Parameter Wert Erläuterung

    WAStorageConnectionString

    UseDevelopmentStorage=true

    Definiert den zu verwendenden Storage Account. Für Testzwecke kann auch (wie hier) der Development Storage verwendet werden.

    WATableName

    DemoTable

    Name der Tabelle im Table Storage

    Tabelle 1: Parameter für den Storage Account und die Tabelle

    Fügen Sie nun noch eine Referenz zur Assembly System.Data.Service.Client dem Projekt hinzu. Klicken Sie hierzu mit der rechten Maustaste auf das WebRole-Projekt und wählen den Menüpunkt Add Reference. Es erscheint die in Abbildung 2‑4 gezeigte Eingabemaske.

    image

    Abbildung 2: Hinzufügen der Referenz auf die Assembly System.Data.Services.Client

    Wählen Sie die Assembly System.Data.Services.Client aus und bestätigen Sie Ihre Auswahl mit OK.

    Öffnen Sie nun die Datei Global.asax.cs. Fügen Sie am Anfang der Datei Referenzen auf folgende Namespaces hinzu:

    ...
    
    using Microsoft.WindowsAzure;
    
    using Microsoft.WindowsAzure.StorageClient;
    
    using Microsoft.WindowsAzure.ServiceRuntime;
    
    ...

    Damit machen Sie dem Programm Klassen zum Zugriff auf die Service-Konfiguration sowie den Windows Azure Storage zugänglich.

    Erweitern Sie nun die Methode Application_Start() wie im folgenden Listing angegeben.

    void Application_Start(object sender, EventArgs e)
    
    {
    
        CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
    
        {
    
            configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
    
        });
    
        var account =
    
            CloudStorageAccount.FromConfigurationSetting("WAStorageConnectionString");
    
        var tableName = RoleEnvironment.GetConfigurationSettingValue("WATableName");
    
        account.CreateCloudTableClient().CreateTableIfNotExist(tableName);
    
    }

    Erstellen Sie nun eine Klasse Klasse Contact.cs. Diese beschreibt letztlich den Aufbau der Einträge in der Table. Implementieren Sie diese Klasse wie folgt:

    using System;
    
    using Microsoft.WindowsAzure.StorageClient;
    
    namespace WebRole
    
    {
    
        public class Contact : TableServiceEntity
    
        {
    
            public Contact(string partitionKey, string rowKey)
    
                : base(partitionKey, rowKey)
    
            {
    
            }
    
            public Contact()
    
            {
    
                PartitionKey = "ABC";
    
                RowKey = string.Format("{0:10}_{1}", DateTime.Now.Ticks, Guid.NewGuid());
    
            }
    
            public string Name { get; set; }
    
            public string Vorname { get; set; }
    
            public string Email { get; set; }
    
        }
    
    }

    In jeder Tabellenzeile warden demnach Name, Vorname und E-Mail-Adresse der Kontakte abgelegt. Hinzu kommen die Pflicht-Propertyes PartitionKey und RowKey. Der PartitionKey wird hier mit einem festen Wert belegt. Damit hält Windows Azure alle Einträge der Tabelle in einer einzigen Partition. Für dieses Beispiel ist dies vertretbar, bei größeren Datenbeständen sollte der PartitionKey jedoch so belegt werden, dass Windows Azure die einzelnen Einträge sinnvoll auf Partitionen aufteilen kann.

    Legen Sie jetzt eine Klasse ContactDataServiceContext.cs an und implementieren Sie diese wie folgt:

    using System.Linq;
    
    using Microsoft.WindowsAzure;
    
    using Microsoft.WindowsAzure.ServiceRuntime;
    
    using Microsoft.WindowsAzure.StorageClient;
    
    namespace WebRole
    
    {
    
        public class ContactDataServiceContext : TableServiceContext
    
        {
    
            internal string ContactTableName = 
    
                RoleEnvironment.GetConfigurationSettingValue("WATableName");
    
            internal ContactDataServiceContext(string baseAddress,
    
                StorageCredentials credentials)
    
                : base(baseAddress, credentials)
    
            {
    
            }
    
            public IQueryable<Contact> Contacts
    
            {
    
                get
    
                {
    
                    return this.CreateQuery<Contact>(ContactTableName);
    
                }
    
            }
    
        }
    
    }

    Über die Property Contacts ermöglicht diese Klasse, die von TableServiceContext abgeleitet ist, den Zugriff auf den Table Storage. Die Speicherung der Kontaktdaten erfolgt in der über die Service-Konfiguration bestimmten Tabelle.

    Die letzte Klasse, die benötigt wird, ist ContactDataSource.cs. Fügen Sie diese dem Projekt hinzu und implementieren Sie sie wie folgt:

    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using Microsoft.WindowsAzure;
    
    using Microsoft.WindowsAzure.StorageClient;
    
    namespace WebRole
    
    {
    
        public class ContactDataSource
    
        {
    
            private ContactDataServiceContext context = null;
    
            public ContactDataSource()
    
            {
    
                var account =
    
                    CloudStorageAccount.FromConfigurationSetting("WAStorageConnectionString");
    
                context = new ContactDataServiceContext(account.TableEndpoint.ToString(),
    
                                                        account.Credentials);
    
                context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1));
    
            }
    
            public IEnumerable<Contact> Select()
    
            {
    
                var results = from c in context.Contacts
    
                              select c;
    
                var query = results.AsTableServiceQuery<Contact>();
    
                var queryResults = query.Execute();
    
                return queryResults;
    
            }
    
            public Contact GetContactById(string PartitionKey, string RowKey)
    
            {
    
                return context.Contacts.Where(c => ((c.RowKey == RowKey) &&
    
                                                   (c.PartitionKey == PartitionKey))).First();
    
            }
    
            public void Delete(Contact contact)
    
            {
    
                Contact item = GetContactById(contact.PartitionKey, contact.RowKey);
    
                context.DeleteObject(item);
    
                context.SaveChanges();
    
            }
    
            public void Insert(Contact contact)
    
            {
    
                context.AddObject(context.ContactTableName, contact);
    
                context.SaveChanges();
    
            }
    
        }
    
    }

    Die Klasse stellt also alle Methoden bereit, die zum Auslesen, Hinzufügen, Ändern und Löschen von Kontakten benötigt werden. Kompilieren Sie nun das Projekt. Dies ist wichtig, da andernfalls die Klasse später nicht Auswahl als Datenquelle für den GridView angeboten wird.

    Öffnen Sie nun die Datei Default.aspx. Fügen Sie der Datei ein GridView hinzu, indem sie ein entsprechendes Element aus der Toolbox auf die Datei ziehen. Die Datei sollte dann wie in Abbildung 3 gezeigt aussehen.

    image

    Abbildung 3: Hinzufügen eines GridView-Controls und Auswahl der Datenquelle

    Bestimmen Sie nun im Kontextmenü des GridViews (zu sehen in Abbildung 3) die Datenquelle. Wählen Sie den Menüpunkt Choose Data Source / New data source. Es erscheint die in Abbildung 4 gezeigte Eingabemaske.

    image

    Abbildung 4: Auswahl einer ObjectDataSource

    Wählen Sie hier als Datenquelle Object und benennen die Datenquelle mit ObjectDataSource. Bestätigen Sie Ihre Eingabe mit OK. Es erscheint die in Abbildung 5 gezeigte Eingabemaske.

    image

    Abbildung 5: Auswahl des Business Objekts

    Wählen Sie hier als Business-Objekt die Klasse WebRole.ContactDataSource und bestätigen Sie Ihre Eingabe mit Next.

    image

    Abbildung 6: Auswahl der Business Methoden für Auswahl, Einfügen und Löschen

    Bestimmen Sie nun die Methoden für die einzelnen Datenoperationen, d.h. für die Operation Select die Methode Select(), für Insert die Methode Insert() usw. Schließen Sie Ihre Eingabe mit Finish ab. Mit diesen Eingaben stehen dem GridView alle Informationen für die Anzeige der Kontaktdaten zur Verfügung. Wenn Sie im Kontextmenü des GridViews noch die Option EnableDeleting auswählen, sollte der Zwischenstand wie in Abbildung 7 gezeigt aussehen.

    image

    Abbildung 7: Zwischenstand nach dem Einfügen der GridView

    Nun wird noch eine Möglichkeit benötigt, um neue Kontakte anzulegen. Fügen Sie hierzu eine FormView in die Seite ein, indem Sie ein entsprechendes Element aus der Toolbox auf die Seite Default.aspx ziehen, und wählen Sie die gleiche Datenquelle wie beim GridView. Bearbeiten Sie im FormView nun das InsertItemTemplate. Wählen sie im Kontextmenü des FormViews den Eintrag Edit Templates und wählen das InsertItemTemplate. Löschen Sie aus der Ansicht nun die automatisch generierten Eingabefelder für PartitionKey, RowKey und Timestamp. Diese sollen ja später nicht vom Benutzer eingegeben sondern vom System erzeugt werden. Damit sollte das FormView wie in Abbildung 8 gezeigt aussehen.

    image

    Abbildung 8: Entfernung von Attributen aus dem InsertItemTemplate

    Nun sind noch ein paar Änderungen im Code der Default.aspx erforderlich. Wechseln sie hierzu in die Code-Ansicht der Seite. Setzen Sie zunächst im GridView die Schlüsselattribute für die Kontakte. Ergänzen Sie das GridView-Element wie folgt.

    ...
    
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    
        <asp:GridView
    
            ID="GridView1"
    
            runat="server"
    
            AutoGenerateColumns="False" 
    
            CellPadding="4"
    
            DataSourceID="ObjectDataSource"
    
            ForeColor="#333333" 
    
            GridLines="None"
    
            DataKeyNames="PartitionKey,RowKey">
    
    ...

    PartitionKey und RowKey bilden zusammen den Primärschlüssel eines Kontakt-Eintrags. Diese Angabe ist erforderlich, damit bei Auswahl der vollständige Schlüssel übergeben werden kann.

    Setzen Sie nun noch wie folgt den Eingabemodus als Standard für die Anzeige der FormView.

    ...
    
        <asp:FormView
    
            ID="FormView1"
    
            runat="server"
    
            DataSourceID="ObjectDataSource"
    
            DefaultMode="Insert">
    
    ...

    Der Code der Datei Default.aspx sollte nun in etwa wie folgt aussehen.

    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    
        CodeBehind="Default.aspx.cs" Inherits="WebRole._Default" %>
    
    <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    
    </asp:Content>
    
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    
        <asp:GridView
    
            ID="GridView1"
    
            runat="server"
    
            AutoGenerateColumns="False" 
    
            CellPadding="4"
    
            DataSourceID="ObjectDataSource"
    
            ForeColor="#333333" 
    
            GridLines="None"
    
            DataKeyNames="PartitionKey,RowKey">
    
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    
            <Columns>
    
                <asp:CommandField ShowDeleteButton="True" />
    
                <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
    
                <asp:BoundField DataField="Vorname" HeaderText="Vorname" 
    
                    SortExpression="Vorname" />
    
                <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
    
                <asp:BoundField DataField="Timestamp" HeaderText="Timestamp" 
    
                    SortExpression="Timestamp" />
    
                <asp:BoundField DataField="PartitionKey" HeaderText="PartitionKey" 
    
                    SortExpression="PartitionKey" />
    
                <asp:BoundField DataField="RowKey" HeaderText="RowKey" 
    
                    SortExpression="RowKey" />
    
            </Columns>
    
            <EditRowStyle BackColor="#999999" />
    
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
    
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
    
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
    
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
    
        </asp:GridView>
    
        <asp:FormView
    
            ID="FormView1"
    
            runat="server"
    
            DataSourceID="ObjectDataSource"
    
            DefaultMode="Insert">
    
            <InsertItemTemplate>
    
              Name:
    
              <asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>' />
    
              <br />
    
              Vorname:
    
              <asp:TextBox ID="VornameTextBox" runat="server" Text='<%# Bind("Vorname") %>' />
    
              <br />
    
              Email:
    
              <asp:TextBox ID="EmailTextBox" runat="server" Text='<%# Bind("Email") %>' />
    
              <br />
    
              <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" 
    
                    CommandName="Insert" Text="Insert" />
    
            </InsertItemTemplate>
    
        </asp:FormView>
    
        <asp:ObjectDataSource ID="ObjectDataSource" runat="server" 
    
            DataObjectTypeName="WebRole.Contact" DeleteMethod="Delete" 
    
            InsertMethod="Insert" SelectMethod="Select" 
    
            TypeName="WebRole.ContactDataSource"></asp:ObjectDataSource>
    
    </asp:Content>

    Damit ist die Anwendung fertig. Starten Sie einen Testlauf, indem Sie den Menüpunkt Debug / Start Debugging auswählen. Nach einem kurzen Moment sollte die Startseite wie in Abbildung 9 zu sehen angezeigt werden.

    image

    Abbildung 9: Erstmalige Ausführung der Table Storage Anwendung

    Da in der Tabelle noch keine Einträge vorhanden sind, wird die Tabelle nicht angezeigt. Es erscheint nur die Eingabemaske. Tragen Sie in diese einen Eintrag ein und bestätigen Sie Ihre Eingabe mit Insert. Anschließend sollte auch die GridView mit dem Tabelleneintrag wie in Abbildung 10 zu sehen angezeigt werden.

    image

    Abbildung 10: Table Storage Anwendung, nachdem ein Eintrag eingefügt wurde

    Weitere Informationen

  • Holger Sirtl's WebLog

    Windows Azure: Anlegen eines minimalen Cloud Service

    • 0 Comments

    Für einige meiner Windows Azure Demos benötige ich immer wieder einen minimalen Cloud Service, der ohne Schnickschnack auskommt, und der einen Blick auf das Wesentliche der Anwendung ermöglicht. Ich möchte kurz beschreiben, wie ein solcher minimaler Cloud Service aussehen kann, und werde auf diesen Blog-Eintrag von folgenden Einträgen verweisen.

    Ich habe von der Erstellung einer solchen Anwendung auch ein Video erstellt, welches hier heruntergeladen werden kann.

    Öffnen Sie zunächst Visual Studio als Administrator. Admin-Berechtigung ist später für das Ausführen im Compute Emulator erforderlich. Legen Sie über den Menüpunkt File / New / Project ein neues Projekt an. Es erscheint die Dialogbox aus Abbildung 1.

    image

    Abbildung 1: Anlegen eines neuen Cloud Service

    Wählen Sie als Projektvorlage Cloud / Windows Azure Projekt und fügen Sie in folgender Eingabemaske dem Service eine neuen Web Role hinzu.

    image

    Abbildung 2: Hinzufügen einer Web Role

    Visual Studio legt nun eine neue Solution an, in die die für den Cloud Service benötigten Elemente (ein Projekt für die Cloud Service Konfiguration und ein Projekt für die Web Role) hinzugefügt werden. Leider fügt Visual Studio auch einige Elemente hinzu, die eigentlich nicht benötigt werden bzw. zum Teil sogar dazu führen, dass der generierte Service zwar lokal im Compute Emulator, nicht aber ohne zusätzliche Konfiguration auf Windows Azure ausführbar ist. So finden sich in der Web.config beispielsweise Referenzen auf eine SqlExpress-Installation, die zwar lokal vorhanden ist, nicht aber in der Cloud, wo dieser Umstand beim Start der Anwendung zu einer Exception führt.

    Im Folgenden werden nun diese Elemente aus dem Cloud Service entfernt. Löschen Sie zunächst überflüssige Inhalte aus dem <asp:Content>-Element der Datei Default.aspx wie folgt:

    ...
    
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    
    </asp:Content>
    
    ...
    

    Löschen Sie nun auch überflüssige Inhalte aus der Datei site.master:

    ...
    
    <div class="header">
    
    <div class="title">
    
        <h1>
    
            My ASP.NET Application
    
        </h1>
    
    </div>
    
    <div class="clear hideSkiplink">
    
    </div>
    
    </div>
    
    ...

    Abschließend löschen Sie nun auch überflüssige Inhalte aus der web.config:

    ...
    
    <configuration>
    
      <system.diagnostics>
    
        ...
    
      </system.diagnostics>
    
      <system.web>
    
        <compilation debug="true" targetFramework="4.0" />
    
      </system.web>
    
      <system.webServer>
    
        <modules runAllManagedModulesForAllRequests="true" />
    
      </system.webServer>
    
    </configuration>
    
    ...
    

    Nun können Sie über den Menüpunkt Debug / Start Debugging einen Testlauf starten, der Ihnen dann folgende Oberfläche zeigen sollte

    image

    Damit ist die Erstellung der minimalen Cloud-Anwendung abgeschlossen.

    Weitere Informationen

  • Holger Sirtl's WebLog

    Windows Azure Dezember Update: Zahlreiche Neuerungen (Übersicht, Branding, Preise, Testangebote, Interoperabilität, ISO 27001 Zertifizierung, …)

    • 1 Comments

    Seit gestern ist das Dezember Update von Windows Azure produktiv. Dieses Update wartet mit einer Reihe wirklich toller Neuerungen auf, die ich im folgenden Zusammenfassen möchte:

    • Vereinfachtes Testangebot (mit Kostendeckelung)
    • Verbesserte Abonnementverwaltung und Echtzeit-Einblick des Verbrauchs
    • Neues SQL Azure Management Portal
    • Erhöhte Maximalgröße von SQL Azure Datenbanken
    • Verfügbarkeit von SQL Azure Federations
    • ISO 27001 Zertifizierung der Windows Azure Kerndienste
    • Windows Azure SDK für Node.js
    • Limitierte Community Technology Preview der Apache Hadoop Distribution für Windows Azure
    • Neue Werkzeuge für Open-Source-Technologien (Eclipse, Java, MongoDB, Solr/Lucene, Memcached)
    • Neues Branding

    Vereinfachtes Testangebot (mit Kostendeckelung)

    In nur 3 einfachen Schritten können Sie sich jetzt schneller den je für Ihr kostenloses Trial Angebot anmelden. Und mit der neuen Kostenkontrolle dabei sicher gehen dass Sie niemals mehr als Ihr kostenloses inklusiv Kontingent nutzen.

    Verbesserte Abonnementverwaltung und Echtzeit-Einblick des Verbrauchs

    Mit der verbesserten Abonnement Verwaltung können Sie jetzt zwischen Windows Azure Preispaketen wechseln oder dabei neue Abonnements anlegen zu müssen. Bestehende Abonnements können jetzt direkt über das Windows Azure Management Portal gelöscht werden und dort erhalten Sie auch minutengenauen Einblick in Ihren aktuellen Verbrauch.

    Neues SQL Azure Management Portal

    Ganz im Metro Stil gehalten vereinfacht das neue Portal das überwachen der SQL Azure Datenbanken, und ermöglicht einen detaillierten Einblick in Schemata, Query Pläne,  Indizes und Performance Statistiken.

    image

    Erhöhte Maximalgröße von SQL Azure Datenbanken

    Die maximale Datenbankgröße einer SQL Azure Datenbank wurde nun von 50 auf 150 GB erhöht um den wachsenden Anforderungen nach mehr Speicherplatz zu genügen. Und während die Datenbankgröße steigt, bleibt der Preis für eine Datenbank der gleiche. Egal ob 50GB oder 150GB, der maximale Preis für eine SQL Azure Datenbank beträgt $ 499.95.Das bedeutet bei Nutzung einer 150GB Datenbank einen effektiven Preisnachlass von 67%.

    Verfügbarkeit von SQL Azure Federations

    Mit den neuen SQL Azure Federation Services skalieren Sie Ihre Datenbanken dank einer neuen Verteilungstechnik noch einfacher und effizienter. Ihre Datenbank skaliert grenzenlos anhand der Anforderungen Ihrer Applikation und ist dabei voll Mandantenfähigkeit.

    ISO 27001 Zertifizierung der Windows Azure Kerndienste

    Seit dem 29. November sind nun auch die Kerndienste von Windows Azure ISO/IEC 27001:2005 durch die BSI Gruppe zertifiziert und auf der Webseite einzusehen.

    Windows Azure SDK für Node.js

    Windows Azure ist schon seit Beginn offen für viele Sprachen wie  PHP, Ruby und selbstverständlich auch .NET. Seit dem Dezember Release wird nun auch Node.js unterstützt. Ab sofort ist ein eigenes Windows Azure SDK für Node.js verfügbar. Die Bibliotheken enthalten Möglichkeiten um auf Windows Azure Speicher zuzugreifen, egal ob als Blob, Tabelle oder Queue. Um den Start mit Node.js für Azure so einfach wie möglich zu machen wurden spezifische Tutorials, Beispiele und Templates auf http://www.microsoft.com/windowsazure  bereitgestellt. Weitere Informationen hierzu im Windows Azure Node.js Developer Center.

    Limitierte Community Technology Preview der Apache Hadoop Distribution für Windows Azure

    Um die neuen Big Data Funktionalitäten auf Windows Azure zu unterstützen wurde eine limitierte CTP für Windows Azure Apache Hadoop veröffentlicht. Dieses Preview ermöglicht es einfach und schnell Hadoop Projekte auf Windows Azure zu betreiben. Da diese Preview nur einer begrenzten Zahl an Benutzern zu Verfügung steht müssen Sie sich dafür über diesen Link registrieren.

    Neue Werkzeuge für Open-Source-Technologien

    Folgende Neuerungen gibt es für Entwickler, die Eclipse, Java, MongoDB, Solr/Lucene oder Memcached verwenden:

    Neues Branding

    Ab sofort werden im Rahmen von Azure nur noch die Marken Windows Azure und SQL Azure verwendet. Cloud Services, die bislang unter der Marke AppFabric liefen, werden ab jetzt unter der Marke Windows Azure geführt (also z.B. “Windows Azure Service Bus”)

    Weitere Informationen

  • Holger Sirtl's WebLog

    Veranstaltungshinweis auf virtuelles Event “Learn Windows Azure” mit Scott Guthrie am 13.12.2011

    • 0 Comments

    Am 13.12.2011 findet in Redmond ein Training-Event zum Thema “Learn Windows Azure” statt. Die gute Nachricht für alle, die sich an diesem Dienstag nicht in Redmond aufhalten: das Gaze wird vollständig auf Channel 9 gestreamt und ist somit allen Interessierten zugänglich.

    Sprecher werden sein (unter anderem):

    • Scott Guthrie, Corporate Vice President, Azure App Platform, Microsoft
    • Dave Campbell, Microsoft Technical Fellow, Server and Tools Business, Microsoft
    • Mark Russinovich, Microsoft Technical Fellow, Windows Azure Group, Microsoft

    Also sehr prominent besetzt.Teilnahme ist kostenlos. Die Agenda sieht wie folgt aus (Vortragszeiten hier in deutscher Zeit):

    Uhrzeit Vortrag
    18:00 - 19:30 Getting Started with Windows Azure
    19:45 - 21:00 Cloud Data & Storage
    21:15 - 22:15 Channel9 Cloud Cover Show Live
    22:30 - 23:30 Developing Windows Azure Applications with Visual Studio
    23:45 - 00:45 Building Scalable Cloud Applications
    01:00 - 02:00 Expert Panel Q&A featuring Scott Guthrie, Dave Campbell und Mark Russinovich

    Anmeldemöglichkeit besteht unter folgendem Link: http://www.learnwindowsazureevent.com/

    Weitere Informationen

  • Holger Sirtl's WebLog

    Neues Windows Azure Toolkit für Social Games (Version 1.1) verfügbar

    • 1 Comments

    Für alle Spiele-Entwickler, die sich bisher noch nicht an das Windows Azure Toolkit für Social Games gewagt haben, da dieses bisher recht stark mit der Demo-Anwendung Tankster verwoben war (sprich: Spiel und Framework waren nicht ausreichend voneinander getrennt), gibt es jetzt eine sehr gute Nachricht: das Windows Azure Toolkit für Social Games ist in Version 1.1 erschienen.

    Die erste Version Des Toolkits fokussierte sehr stark auf die Beispielanwendung Tankster, d.h. Framework und Beispielanwendung waren sehr eng miteinander verzahnt. In Version 1.1 sind diese beiden Elemente voneinander getrennt. Damit wird es deutlich leichter möglich, sich in das Social Gaming Framework einzuarbeiten.

    Kernfunktionalitäten des Toolkits sind:

    • Beispiel-Spiele Tic-Tac-Toe, Vier Gewinnt, Tankster
    • Authentifizierung via Access Control Service
    • JavaScript Tests
    • Spielstand-Verwaltung
    • User Profile
    • Einladungen und Benachrichtigungen
    • Tests für Client- und Server-Code
    • Wiederverwendbare JavaScript Bibliotheken

    Weitere Informationen

  • Holger Sirtl's WebLog

    Neues Windows Azure SDK (November 2011) und Windows Azure HPC Scheduler SDK verfügbar

    • 3 Comments

    Die Windows Azure Produktgruppe hat heute Nacht einige Neuerungen für Windows Azure Entwickler bereitgestellt. Die Highlights sind:

    • Ein neues Windows Azure SDK (November 2011)
      Dieses neue Software Development Kit enthält eine Reihe von Werkzeugen für Visual Studio 2010, die einige häufige Arbeitsschritte bei Entwicklung, Deployment und Management von Azure-Services deutlich erleichtern. Das Windows Azure SDK kann hier heruntergeladen werden.
    • Ein Windows Azure HPC Scheduler SDK
      Dieses SDK arbeitet mit dem Windows Azure SDK Hand in Hand und unterstützt bei der Entwicklung von High Performance Computing (HPC) Anwendungen, die massiv Gebrauch von großen Datenmengen und Parallelisierung machen. Das Windows Azure HPC Scheduler SDK kann hier heruntergeladen werden.
    • Ein aktualisiertes Windows Azure Platform Training Kit
      Dieses Training Kit enthält Hands-on-Labs, Demos und Präsentationen, die Schritt für Schritt durch die einzelnen Elemente der Windows Azure Platform führen. Das Windows Azure Platform Training Kit kann hier heruntergeladen werden.

    Das Windows Azure SDK (und die Tools für Visual Studio) enthält unter anderem folgende Neuerungen:

    • Vereinfachtes Publishing von Azure-basierten Anwendungen direkt aus Visual Studio.
    • Mehrere Publishing Profile, in denen Build- und Cloud-Konfigurationen hinterlegt werden können.
    • Unterstützung von Team Build (zur Delegierung des Build-Prozesses auf dedizierte Build Maschinen)
    • Verbesserte In-Place Updates (siehe auch diesen Blogpost)
    • Verbesserter Publishing Wizard
    • Automatisierte Konfiguration von Credentials (keine manuelle Erstellung von Zertifikaten mehr erforderlich)
    • Verwaltung mehrerer Subscriptions
    • Erstellung neuer Hosted Services direkt aus Visual Studio heraus
    • Erstellung von Storage Accounts direkt aus Visual Studio heraus
    • Verbesserte Einrichtung von Remote Desktop Zugängen zu Hosted Services
    • Erweitertes Azure Activity Log zum Nachverfolgen von Deployment-Vorgängen

    Weitere Informationen

  • Holger Sirtl's WebLog

    Neues auf Channel 9: Windows Phone Push Notifications und Windows Azure

    • 2 Comments

    In dieser Ausgabe von Channel 9 zeigt mein Kollege Wade Wegner, wie in weniger als 2 Minuten mit Hilfe dreier NuGet Packages ein neues Windows Phone 7.1 Projekt erstellt werden kann, das Push Notifications nutzen kann, die in einer auf Windows Azure betriebenen ASP.NET MVC 3 Anwendung erzeugt werden.

    Zur Implementierung werden die folgenden NuGet-Packages benötigt:

    • Phone.Notifications.BasePage
    • CloudServices.Notifications
    • WindowsPhone.Notifications.ManagementUI.Sample

    Weitere Informationen

  • Holger Sirtl's WebLog

    Neues auf CodePlex: BlobShare–Sicherer Dokumentenaustausch über Windows Azure Blob Storage

    • 0 Comments

    Heute möchte ich auf eine kleine, aber sehr coole Anwendung hinweisen, die meine Kollegen aus Redmond (unter anderem Wade Wegener) auf Codeplex veröffentlicht haben: BlobShare. Mit dieser Anwendung ist es möglich, auf sichere Art und Weise Dokumente über Windows Azure Blob Storage auszutauschen. Dabei werden Zugriffe über den Access Control Service abgesichert, d.h. nur vorher von einem Administrator konfigurierte Benutzer können sich nach einer entsprechenden Authentifizierung anmelden, um Dokumente hochzuladen, zu ändern oder abzurufen. Dabei werden verschiedene Authentifizierungsmechanismen unterstützt. Benutzer können ihnen vertraute Dienste wie Windows Live ID, Facebook ID, Google ID oder auch Active Directory zur Authentifizierung nutzen.

    Die Architektur stellt sich wie folgt dar:

    SolutionArchitecture

    Die Nutzung gestaltet sich demnach wie folgt:

    • Ein Administrator legt die Benutzer des BlobShares fest, die Benutzerdaten werden in SQL Azure abgelegt.
    • Ein Benutzer authentifiziert sich über den Access Control Service.
    • Nach erfolgreicher Authentifizierung kann er dann Dokumente im zugehörigen Blob-Storage ablegen, ändern und abrufen.

    Zur Nutzung in eigenen Szenarien wird ein Windows Azure Account benötigt. Für einen temporären Einsatz empfiehlt sich der kostenfreie Azurepass. Dieser erlaubt eine kostenfreie, unverbindliche Nutzung von Azure über einen Zeitraum von 30 Tagen.

    Weitere Informationen

  • Holger Sirtl's WebLog

    Neues auf Channel 9: Windows Azure Marketplace mit Christian Liensberger

    • 0 Comments

    In der neuesten Ausgabe von Channel 9 gibt Christian Liensberger, Program Manager für den Windows Azure Marketplace einen Überblick über ebendiesen Dienst der Windows Azure Platform. Zusammen mit Steve Marx und Wade Wegner spricht er über Daten und Anwendungen im Windows Azure Marketplace.

    Weitere Nachrichten in dieser Channel-9-Folge

    Weitere Informationen

  • Holger Sirtl's WebLog

    Blog-Serie: Erstellung eines Android-Clients, der als Backend einen REST-Service aus Windows Azure nutzt

    • 0 Comments

    Mein Kollege, Bruno Terkaly, hat eine tolle Blog-Serie verfasst, in der er auf die Erstellung eines Android-Clients eingeht, der auf einen REST-Service aus Windows Azure zugreift. Die Blog-Serie besteht aktuell aus folgenden acht Teilen:

    Weitere Informationen

  • Holger Sirtl's WebLog

    Warum Feedback an MSDN/TechNet wichtig ist…

    • 0 Comments

    “Schon wieder ein Feedback-Formular, das ich ausfüllen soll?…” – das denke sicher nicht nur ich, wenn ich am Morgen mein E-Mail Postfach einsehe. Und tatsächlich nehmen solche Anfragen zuweilen überhand. Da kann es schon mal passieren, dass man eine solche einfach löscht.

    Allerdings: Feedback ist wichtig, wird gehört und kann Dinge verändern!

    Mein Kollege, Lars Schmoldt, schreibt in seinem Beitrag auf TechNet, warum es sinnvoll ist, MSDN und TechNet Feedback zu geben:

    • Feedback hilft uns, zielgerichtet und bedarfsorientiert Informationen bereitzustellen
    • Wir können Weiterbildungsangebote gezielt auf Anforderungen unserer Zielgruppen anbieten
    • Auf Basis der Rückmeldungen können wir Informationen besser zugreifbar und auffindbar machen

    Alles weitere in Lars’ Artikel. Bei Fragen hierzu bzw. zu TechNet kontaktieren Sie ihn einfach per E-Mail.

  • Holger Sirtl's WebLog

    Finale Preview Version des SQL Azure Reporting Service verfügbar

    • 0 Comments

    Die SQL Azure Gruppe hat die finale Community Technology Preview (CTP) Version des SQL Azure Reporting Service veröffentlicht. Diese Preview ist ab sofort verfügbar und über das Windows Azure Management Portal ohne weiteren Registrierungsprozess verfügbar. Alle bestehenden SQL Azure Abonnenten können diese finale Preview nutzen.

    Ebenso verfügbar ist die finale CTP Version des SQL Azure Data Sync Service. Beide Services werden demnächst kommerziell verfügbar. Bis dahin können sich auf Basis von Anwenderfeedbacks (also fleißig Rückmeldung geben!) noch kleinere Änderungen ergeben.

    Unter http://www.microsoft.com/windowsazure/features/database/ gibt es weitere Informationen zu den Services sowie eine aktualisierte FAQ-Liste.

    Zu Nutzung dieses SQL Azure Reporting Release sind folgende Schritte erforderlich:

    1. Falls noch nicht geschehen, Anlegen eines Windows Azure Accounts z.B. unter http://www.microsoft.com/windowsazure/free-trial/
    2. Einloggen beim Windows Azure Portal. Auf der linken Navigationsleiste den Punkt “Reporting” (bzw. deutsch: “Berichterstellung”) anklicken. Dort führt ein Wizard durch das Anlegen eines neuen Reporting Servers.
    3. Deployment neuer Reports auf den neuen Server.

    Weitere Ressourcen

  • Holger Sirtl's WebLog

    Neues Windows Azure Platform Training Kit–September Update

    • 0 Comments

    Im Microsoft Download Center steht ein neues Windows Azure Platform Training Kit zum Herunterladen bereit. Es handelt sich um das September Update, welches unter anderem folgende Neuerungen enthält:

    • Neues Hands-on-Lab zum Service Bus Messaging
    • Aktualisierte Labs und Demos zum neuen Windows Azure SDK & Tools 1.5
    • Aktualisierte Labs und Demos zum neuen AppFabric SDK 1.5
    • Aktualisierter Überblick zum Windows Azure Marketplace for Data
    • Mehrere kleinere Korrekturen zu den Inhalten

    Weitere Informationen

  • Holger Sirtl's WebLog

    Hilfreiche Ressourcen zu Windows Azure Services zusammengestellt von Alik Levin

    • 0 Comments

    Mein Kollege Alik Levin hat großartige Arbeit geleistet, indem er auf seinem Blog zahlreiche, hilfreiche Online-Ressourcen zu verschiedenen Windows Azure Ressourcen zusammengestellt hat. Diese geben für viele reale Entwicklungsszenarien schnelle Hilfestellung. Zu den Ressourcen zählen…

    • How-To-Guides
    • Slides
    • Videos
    • Troubleshooting-Hilfestellungen

    Die Links zu seinen Blog-Einträgen:

    Ich war so frei, und habe einige seiner Links in meine eigene Video-Liste aufgenommen. Hier die Links:

  • Holger Sirtl's WebLog

    Ressourcen zum Private Cloud Computing mit der Microsoft Plattform

    • 1 Comments

    Die Welt lebt nicht nur von der “Public Cloud”, die Microsoft ja erfolgreich mit der Windows Azure Platform auf der PaaS-Ebene und Office 365 auf der SaaS-Ebene anbietet. Der Aufbau einer “Private-Cloud”-Umgebung ist auf Basis der Microsoft Plattform ebenfalls möglich. Hierzu gibt es eine Vielzahl an Online-Ressourcen. Die wichtigsten hat mein Kollege Lars Schmoldt zusammengestellt:

    Weiterbildungsangebote

    Downloads

    Die Links finden sich auch auf meiner Sammlung an Web-Ressourcen rund um Cloud Computing.

  • Holger Sirtl's WebLog

    Nachlese zur BUILD-Konferenz: Cloud- und Windows-Azure-relevante Vorträge (Videos und Folien zum Download)

    • 0 Comments

    Die Build-Konferenz letzter Woche brachte neben vielen Sessions zu Windows 8 auch eine große Zahl an Vorträgen rund um die Themen Cloud und Windows Azure Platform (zum Teil in Kombination mit Windows 8. Folgende Tabelle zeigt alle Sessions mit Bezug zu den genannten Themen. Zu allen Vorträgen finden sich die Links zur den Slidedecks sowie Links zu den Videos (jeweils MP4 sowie WMVs in mittlerer (WMV-M) und hoher (WMV-H) Auflösung).

    TitelReferentPPTXVideos
    Building and running HPC apps in Windows Azure Greg Burgess PPTX MP4,
    WMV-M,
    WMV-H
    Analyzing "big data" with LINQ to HPC Ade Miller PPTX MP4,
    WMV-M,
    WMV-H
    Building Web APIs in Windows Azure with WCF to reach any device Glenn Block PPTX MP4,
    WMV-M,
    WMV-H
    Your devices + OData + Windows Azure == happiness Mike Flasko PPTX MP4,
    WMV-M,
    WMV-H
    Getting started with Windows Azure Brian Prince PPTX MP4,
    WMV-M,
    WMV-H
    What's new in Windows Azure James Conard PPTX MP4,
    WMV-M,
    WMV-H
    Introdction to Windows Azure: the cloud operating system Mark Russinovich PPTX MP4,
    WMV-M,
    WMV-H
    Inside Windows Azure: the cloud operating system Mark Russinovich PPTX MP4,
    WMV-M,
    WMV-H
    Identity and access management for Windows Azure apps Vittorio Bertocci PPTX MP4,
    WMV-M,
    WMV-H
    Monitoring and troubleshooting Windows Azure apps Michael Washam PPTX MP4,
    WMV-M,
    WMV-H
    Using cloud storage from Windows apps Wade Wegner PPTX MP4,
    WMV-M,
    WMV-H
    Building loosely-coupled apps with Windows Azure Service Bus Topics and Queues Clemens Vasters PPTX MP4,
    WMV-M,
    WMV-H
    Delivering notifications with the Windows Push Notification Service and Windows Azure Darren Louie,
    Nick Harris
    PPTX MP4,
    WMV-M,
    WMV-H
    Building apps with Windows Workflow Foundation and Windows Azure Jurgen Willis
    Josh Twist
    PPTX MP4,
    WMV-M,
    WMV-H
    Building device & cloud apps Wade Wegner PPTX MP4,
    WMV-M,
    WMV-H
    Building global and highly-available services using Windows Azure David Aiken PPTX MP4,
    WMV-M,
    WMV-H
    Building scalable web apps with Windows Azure Matthew Kerner PPTX MP4,
    WMV-M,
    WMV-H
    Building social games for Windows 8 with Windows Azure Nathan Totten PPTX MP4,
    WMV-M,
    WMV-H
    Building Windows 8 and Windows Azure apps Steve Marx PPTX MP4,
    WMV-M,
    WMV-H
    F# 3.0: data, services, Web, cloud, at your fingertips Don Syme PPTX MP4,
    WMV-M,
    WMV-H
    Inside Windows Azure storage: what's new and under the hood deep dive Brad Calder PPTX MP4,
    WMV-M,
    WMV-H
    Taking your Application Lifecycle Management to the cloud with the Team Foundation Service Doug Neumann PPTX MP4,
    WMV-M,
    WMV-H
    Power your app with Live services Dare Obasanjo PPTX MP4,
    WMV-M,
    WMV-H
    The complete developer's guide to the SkyDrive API Steve Gordon PPTX  
     
     
    Making apps social and connected with HTTP services Alexander Corradini
    Suhail Khalid
    PPTX MP4,
    WMV-M,
    WMV-H
    Building Xbox LIVE games for Windows 8 Avi Ben-Menahem PPTX MP4,
    WMV-M,
    WMV-H
    Using Windows Server 8 for building private and public IaaS clouds Sandeep Singhal,
    Jeff Woolsey,
    Yigal Edery
    PPTX MP4,
    WMV-M,
    WMV-H
    Designing the building blocks for a Windows Server 8 cloud Ross Ortega,
    Yigal Edery
    PPTX MP4,
    WMV-M,
    WMV-H
    Network acceleration and other NIC technologies for the data center Don Stanwyck
    Michael Nanakul
    PPTX MP4,
    WMV-M,
    WMV-H
    Enabling multi-tenancy and converged fabric for the cloud using QoS Charley Wen,
    Richard Wurdack
    PPTX MP4,
    WMV-M,
    WMV-H
    Building secure, scalable multi-tenant clouds using Hyper-V Network Virtualization Murari Sridharan,
    Yu-Shun Wang
    PPTX MP4,
    WMV-M,
    WMV-H
    Optimal cloud performance with BranchCache Andrew Cunningham,
    Tyler Barton
    PPTX MP4,
    WMV-M,
    WMV-H
    Create experiences that span devices John Sheehan PPTX MP4,
    WMV-M,
    WMV-H
  • Holger Sirtl's WebLog

    Nachlese zur BUILD-Konferenz: Neuigkeiten für Windows Azure Entwickler–Toolkit für Windows 8

    • 0 Comments

    Die letzte Woche in Los Angeles abgehaltene BUILD-Konferenz stand ganz im Zeichen von Windows 8. Neben zahlreichen Details zu Oberfläche, Entwickleroptionen gab es auch eine Developer-Preview zum Download. Dabei ist fast untergegangen, dass es auch zur Windows Azure Platform Neuerungen gab:

    • Windows Azure SDK 1.5
    • Geo-Replikation
    • Neue Funktionen für Blob, Table und Queue Storage
    • Windows Azure Toolkit for Windows 8

    Windows Azure SDK 1.5

    Gegenüber dem August-Release des Windows Azure SDKs hat das neue SDK einige entscheidende Verbesserungen:

    • Neuer Compute Emulator mit gesteigerter Deployment-Performanz
    • Verbesserte Validierung von Deployment-Paketen
    • Unterstützung beim Upload von Service Zertifikaten in csupload..exe und ein neues Tool csencrypt.exe, mit dem Remote Desktop Passwörter verschlüsselt und verwaltet werden können.

    Und auch die Tools für Visual Studio haben einige Verbesserungen erhalten:

    • Möglichkeit, ein Windows Azure Deployment Projekt zu bestehenden Web Application Projekten hinzuzufügen.
    • Profiling von Anwendungen, die auf Windows Azure ausgeführt werden.
    • Erstellung von ASP.NET MVC3 Web Roles.
    • Management mehrerer Konfigurationen in einem Cloud Projekt.
    • Verbesserte Validierung von Windows Azure-Paketen.

    Geo-Replikation

    Mit dieser Funktion werden Inhalte aus Windows Azure Blob- und Table-Storage zwischen Rechenzentren einer Region repliziert, ohne dass hierbei zusätzliche Kosten für die Nutzer anfallen. Diese Replikation dient dem Desaster Recovery. Dabei kommen Rechenzentren zum Einsatz, die mindestens 100km voneinander entfernt liegen. Grundsätzlich ist diese Replikation aktiviert, kann auf Wunsch aber auch deaktiviert werden.

    Neue Funktionen für Blob, Table und Queue Storage

    Auch der Windows Azure Storage hat Neuerungen erhalten:

    • Table Upsert – in einem einzigen Request können Entitys hinzugefügt (sofern sie noch nicht existieren) bzw. aktualisiert (sofern sie existieren) werden.
    • Table Projection (Select) – ermöglicht es, nur ein Subset der Properties von Entitys abzufragen. Dies reduziert den Aufwand zu Serialisierung und die Menge der zu übertragenden Daten.
    • Verbesserter Blob HTTP Header Support – verbessert die Möglichkeiten zum Streaming und Download von Inhalten
    • Queue UpdateMessage – erlaubt den Zugriff auf Messages in einer Queue.
    • Queue InsertMessage – ermöglicht das Hinzufügen von Messages, die zunächst für einen bestimmten Zeitraum unsichtbar sind.

    Windows Azure Toolkit for Windows 8

    Mit Hilfe des Windows Azure Toolkits können leicht Metro-style Apps für Windows 8 entwickelt werden, die Services im Windows Azure Compute Service und Daten in Windows Azure Storage nutzen können. Funktionen sind:

    • Code Beispiele, Dokumentation und Best Practice
    • Projektvorlagen für Visual Studio
    • Code in Form wiederverwendbarer Dienste und Bibliotheken

    Microsoft setzt damit den Weg fort, die Entwicklung von Azure-Clients für möglichst viele mobile Endgeräte zu unterstützen. Neben dem Toolkit für Windows 8 gibt es auch Toolkits für Windows Phone, iOS und Android. Siehe hierzu auch meine aktualisierte Liste von SDKs und Tools.

    Weitere Informationen

Page 1 of 8 (181 items) 12345»