|
Aujourd’hui, on tente de migrer des données d’une base SQL On-Premises. j’utilise l’outil SQL Server Import and Export Data provenant de SQL Server 2008 R2 November CTP. Pour cela je m’appuie sur la base de démo AdventureNetworks. Je vais tenter d’exporter la table Customer uniquement. J’ai au préalable créé une table nommée “Azure” avec un utilisateur ayant le rôle db_owner. Lancez l’outil SQL Server Import and Export Data : Menu Démarrer > Microsoft SQL Server 2008 R2 November CTP > Import and Export Data Appuyez sur Next.  Ici on va sélectionner la base de données SOURCE, donc AdventureWorksLT2008R2 : Le serveur destination doit utiliser .Net Framework Data Provider for SqlServer. Il faut renseigner quelques champs Data Source : l’adresse de votre serveur SQL Azure du type <servername>.database.windows.net Encrypt : True Initial Catalog: la base de données qui recevra les données à exporter Password: le mot de passe de l’utilisateur ayant les droits sur la base User ID: le login de l’utilisateur ayant les droits sur la base. ATTENTION : pour certaines raisons que j’ignore encore, la connexion peut être rejetée avec l’erreur suivante : Si c’est votre cas, modifiez le User ID par : <login>@<servername> On valide. Je choisis de n’exporter que la table Customer : J’ai quelques Warning qui s’affichent mais rien de bien inquiétant… Voici un récapitulatif de l’exportation qui va être effectuée, en source j’ai bien mon instance SQL en local et en destination je pointe vers une instance SQL Azure : Je me lance…. Et bien NON! Une erreur est survenue A priori, SQL Azure ne supporte que des table ayant un Clustered Index! Bon on n’abandonne pas si proche de la réussite. La table a bien été créée (vérifiez dans le SQL Management Studio), je décide de la supprimer pour repartir de zéro. Ensuite au niveau du wizard, on retourne à la page Select Source Tables and Views, cliquez sur Edit Mappings…  On va modifier le script SQL généré pour la création de la table, cliquez sur Edit SQL :  Et là, excusez moi, mais on va faire un truc pas très catholique, on va créer un index sur la table à la suite du script de création de la table : Validez et relancez le processus : Mes 847 lignes ont bien été transférées, la preuve : Ronny Member of WygTeam www.wygwam.com
2 jours d’utilisation d’Azure et déjà je voudrais connaitre ma consommation. Normal! Avec l’offre Introductory Special, j’ai droit à 25h VM / mois. Ce matin en me levant, je réalise, boulet que je suis, que j’ai oublié de supprimer mon application. Résultat Windows Azure m’a provisionné une VM pendant tout ce temps. Alors où peut on voir sa consommation??? 1 - Il faut se rendre sur https://mocp.microsoftonline.com 2 – Se logger avec son Live ID 3 – Cliquez sur View My Bills 4 – Une nouvelle fenêtre apparaît, cliquez sur View Online Bill/Invoice 5 – le détail de votre facture apparaît (ouf tout est à 0€), cliquez sur Utilisation quotidienne Et le détail de la consommation apparaît. J’ai donc cramé 14h d’utilisation VM entre hier soir et ce matin! ouch! Ronny Member of WygTeam www.wygwam.com
Petites astuces pour tous les bloggeurs. Il y a différents moyens de faire des captures d’écran 1 - ALT+ Impr écran vous envoie une capture de tout votre écran dans le presse papier Petite rectification, Shift+Impr écran capture tout votre écran, ALT+Impr écran capture uniquement la fenêtre active 2 – L’outil Capture d’écran de Windows Seven qui vous permet de capturer des zones spécifiques d’écran 3 – Si vous avez Office 2010 et One Note d’installé, appuyez sur les touches Windows + s, un curseur apparaît et vous permet de rapidement capturer une zone d’écran à destination d’une fiche one note ou du presse papier. Ronny Member of WygTeam www.wygwam.com
En coïncidence avec les débuts commerciaux de Windows Azure, l’équipe Windows Azure annonce la sortie d’une mise à jour du SDK. Attention toutefois, elle n’est pas compatible avec Visual Studio 2010 Beta 2, pour VS 2008 et VS2010 RC, c’est ok. Elle corrige quelques bugs et surtout elle apporte une feature très attendue : le Windows Azure Drive qui permet de monter un Page blob en tant que disque dur virtuel au sein d’une instance VM! Pour le moment Microsoft assure que la facturation ne serait liée qu’à l’utilisation classique des blobs (stockage et requêtes). De ce fait, le Windows Azure Drive propose un mécanisme de cache (en s’appuyant sur le local storage de la VM) afin de limiter les accès Blob et donc réduire les coûts. Plus d’information sur le blog de la team Windows Azure. La mise à jour du SDK Le livre blanc de Windows Azure Drive Ronny Member of WygTeam www.wygwam.com
Comme indiqué dans mon billet précédent, cette offre est “gratuite”. Les caractéristiques de cette offre sont les suivantes : Included each month at no charge: - Windows Azure
- 25 hours of a small compute instance
- 500 MB of storage
- 10,000 storage transactions
- SQL Azure
- 1 Web Edition database (available for first 3 months only)
- AppFabric
- 100,000 Access Control transactions
- 2 Service Bus connections
- Data Transfers (per region)
Cependant, si l’utilisation excède ces limites, vous basculerez immédiatement dans le mode “Pay As You Go” dont la grille tarifaire est la suivante : Standard Rates: Windows Azure - Compute
- Small instance (default): $0.12 per hour
- Medium instance: $0.24 per hour
- Large instance: $0.48 per hour
- Extra large instance: $0.96 per hour
- Storage
- $0.15 per GB stored per month
- $0.01 per 10,000 storage transactions
- Content Delivery Network (CDN)
- Service currently available as a Community Technology Preview (CTP) at no charge
SQL Azure - Web Edition – Up to 1 GB relational database
- $9.99 per database per month
- Business Edition – Up to 10 GB relational database
- $99.99 per database per month
AppFabric - Access Control
- $1.99 per 100,000 transactions*
- Service Bus
- $3.99 per connection on a “pay-as-you-go” basis*
- Pack of 5 connections $9.95*
- Pack of 25 connections $49.75*
- Pack of 100 connections $199.00*
- Pack of 500 connections $995.00*
Data Transfers - North America and Europe regions
- $0.10 per GB in
- $0.15 per GB out
- Asia Pacific Region
- $0.30 per GB in
- $0.45 per GB out
- Inbound data transfers during off-peak times through June 30, 2010 are at no charge. Prices revert to our normal inbound data transfer rates after June 30, 2010.
Je vous invite également à lire l’article de Sébastien Warin qui détaille les types d’instances sur Windows Azure. Après ça, il faut savoir que tant qu’une application est hostée dans une VM, elle vous sera facturée même si elle est en mode Suspended! pensez bien à supprimer votre application sous peine de voir votre quota diminuer inlassablement. Enfin un conseil : Dépêchez vous de profiter de cette offre car elle ne sera valable que jusqu’à fin juillet 2010! Ronny Member of WygTeam www.wygwam.com
Après quelques mois d’absence me revoilà pour parler d’Azure, l’occasion pour moi de découvrir toutes les nouveautés et changements depuis la CTP et aussi de lire les nombreux mails… Depuis quelques semaines, Microsoft envoie de réguliers rappels à tous ceux qui disposent d’un compte Azure CTP et qui n’ont à ce jour pas effectué la migration (Ok la dead line était pour le 31 janvier 2010) quoi qu’il en soit, je me décide à m’offrir un compte. 1. Souscription à une offre Il faut se rendre à cette page http://www.microsoft.com/windowsazure/offers/ A ma grande surprise Microsoft propose une offre “gratuite” nommée Introductory Special Ci-dessous la grille tarifaire de l’offre Azure : Microsoft propose donc globalement 2 types d’offres : des forfaits où des limites de consommation sont imposées et le forfait “Pay As You Go” où vous paierez à la consommation suivant les bases tarifaires mentionnées dans le tableau. Je me lance donc et je souscris à l’offre Introductory Special qui va me permettre de dérouler tranquillement les nouveaux training kit d’Azure (oui ceux de Novembre 2009…) Après avoir rentré mes informations (adresse, téléphone), voici le récapitulatif de ma commande : 2. Le paiement Et oui, pendant la prochaine étape il va quand même vous falloir sortir votre chère carte bancaire Récapitulatif de la commande Vous pouvez identifier chacun des abonnements auxquels vous avez souscrit : Résumé de la commande : et finalement la confirmation 3. Validation de l’abonnement Dans les 24 heures qui suivent vous recevrez un mail suite à votre commande Il faut vous rendre sur la page du Portail Clients Microsoft Online Services et valider votre abonnement. L’abonnement se retrouve alors dans l’état “Validation en cours”, il ne reste plus qu’à attendre. Enjoy Azure! Ronny Member of WygTeam www.wygwam.com
Est-ce que votre site fonctionne? c’est ce que propose cette application azure, il suffit de vous inscrire et l’appli se charge de vérifier toutes les 15 minutes si votre site est en bon état de marche, en cas de panne, vous serez prévenu via Twitter Par ici pour l’application : http://isup.cloudapp.net
David Chappell est un célèbre conférencier pour de grands comptes, il animera, à l’occasion du Windows Azure World Tour 2009, une session autour de la plateforme azure : “In this session aimed at decision makers, David Chappell looks at the Windows Azure platform and what it means for ISVs, custom software development firms and enterprises. The topics he’ll cover include: -An overview of the Windows Azure platform: Technology and business model -The cloud platform context: Google, Amazon, Salesforce.com, and more -Using the Windows Azure platform: Application scenarios The goal is to provide a foundation for thinking about the Windows Azure platform, then offer guidance on how to make good decisions for using it. Register for you local event to secure your spot today.” Source : http://hub.digitalwpc.com/Azure/Item/Azure-Tools/NorthAmericaAzure/Windows-Azure-WW-Event-An-Exclusive-Cloud-Perspective-for-ISVs Pourquoi je vous en parle? et bien la session française se tiendrait à Paris le 9 octobre 2009.
Verra-t-on le support de projets Azure dans Team Foundation System dans les prochains mois? C’est ce qu’à laisser penser l’un des membres de la Windows Azure Team lors d’une chatroom organisée il y a quelques heures. Il est vrai que ça serait un outil indispensable pour pouvoir inclure des projets Azure dans l’intégration continue (déroulement des tests + déploiement automatique sur la plateforme azure). Il serait aussi prévu des commandes type powershell pour pouvoir déployer voire manipuler ses instances on the cloud (Staging <—> Production).. Steve Smarx a aussi annoncé la gratuité d’Azure pour certains types de programme comme Bizspark (espérons MSDN, MSDNAA pour les étudiants et bien d’autres encore…) Autre news, il semblerait que l’équipe soit en train de mettre en place des Patterns and Practices pour Azure. Des informations à prendre avec des pincettes
Steve Marx via tweeter a annoncé une chatroom sur le thème d’azure vendredi soir aux environ de 20h (heure française) . Rendez vous à l’adresse suivante : http://wazl.cloudapp.net/. Si vous avez des questions c’est le bon moment!
Microsoft a enfin annoncé le pricing model d’Azure. Reste à savoir si celui-ci fera des adeptes. Vous pouvez retrouver les infos là : Mes craintes me concernant sont de savoir si Microsoft prévoit de faire un geste pour les développeurs lambda voire les communautés Open-Source créée autour d’Azure. En tout cas on peut lire sur leur site : As part of the Microsoft Partner Network, partners receive an additional 5 percent promotional discount on Windows Azure compute, SQL Azure and .NET Services. As an added benefit of MSDN Premium, Microsoft also announced that it will provide subscribers with resources to develop and test their cloud-based applications. Microsoft will also provide the development accelerator promotional offer for partners and customers who want to quickly develop and deploy applications with dynamic scaling, predictable pricing, and a deep discount. Des réductions dans tous les sens woohoo “Deep Discount”… La gratuité serait utopique, mais Google propose pourtant un seuil en-dessous duquel la gratuité est de mise :http://code.google.com/intl/fr/appengine/ Pour comparaison : | | Microsoft Azure | Google App Engine | Amazon EC2 | | CPU Time | $0.12 / hour | $0.10 / hour | $0.125 / hour (Window Usage/Europe pricing) | | Storage | $0.15 / GB / month | $0.15 / GB / month | $0.10 / GB / month | | Storage Transaction | $0.01 / 10’000 requêtes | ?? | $0.001 / 10’000 requêtes | | Bandwith “In” | $0.10 / GB | $0.10 / GB | $0.10 / GB | | Bandwith “out” | $0.15 / GB | $0.12 / GB | $0.17 / GB (dégressif au bout de 40TB) | Ces valeurs et comparaisons n’engagent que moi.
Une loi va être appliquée le 1er Juillet 2009 visant à réduire la TVA de 19,6 à 5,5% dans le secteur de la restauration. Cette baisse concernera 7 produits parmi une liste de 10 produits (café? plat du jour?). C’est pendant les Azure Camps qu’une application – Resto55 – a été développée. Elle a pour principal objectif de montrer quel restaurant joue le jeu de la baisse ou pas. Resto55 est hébergée sur Azure et se résume ainsi :
- Rechercher des restaurants
 - Ajouter un nouveau restaurant
- Renseigner le prix actuel d’un ou plusieurs éléments de votre commande (garder vos tickets de caisse!)
- Suivre la courbe d’évolution du prix d’un élément
Pour cela, Resto55 se dote d’un site web http://www.resto55.org mais également d’une API en REST pour pouvoir interagir avec Resto55.
Possesseurs d’Androïd?
Une application a été développée pour vous! Cette application communique avec Azure à l’aide d’un webservice et bénéficie des principales fonctionnalités de Resto55, vous pouvez la retrouver à http://www.resto55.org/Developper.aspx. (On cherche des développeurs iPhone et Windows Mobile et tout autre plateforme mobile!)
En attendant que d’autres applications voient le jour, vous pouvez surfer sur la version mobile de Resto55 à http://azurecamp.cloudapp.net.
Parlez-en autour de vous, on compte sur vous pour agrandir la base de données!
Si vous êtes intéressés par développer de telles applications, venez nous rejoindre lors des Azure Camps, plus d’infos sur http://www.zecloud.fr
L’application livre ses sources sur Codeplex sous licence MS-PL! http://zecloud.codeplex.com/

Mais alors une toute petite, petite astuce. Si vous utilisez Azure Storage en spécifiant votre compte “on the cloud” alors vous n’avez pas besoin de le simuler en local. Vous pouvez alors désactiver le Development Storage en allant dans les propriétés du projet Cloud, dans l’onglet Development, attribuer au champ Start Development Storage Services à False : 
Je viens de tomber sur l’excellent blog de David Pallman et notamment sur un site qu’il héberge dans Windows Azure. David Pallman propose quelques patterns de conception avec des schémas bien sympas. Fini donc les schémas à la main :) Le site en question : http://azuredesignpatterns.cloudapp.net/Default.aspx Cloud Hosting Patterns | | | | | Web Role Azure Web Role – .NET/ASP.NET |  Web Service Role Azure Web Role – .NET/WCF | Worker Role Azure Worker Role – .NET | Workflow Role .NET Services Workflow Service – .NET/WF | Cloud Data Patterns | | | | | Cloud Blob Storage Windows Azure Storage Project - Blob Storage | Cloud Queue Storage Windows Azure Storage Project – Queue Storage | Cloud Table Storage Windows Azure Storage Project – Table Storage | Cloud Database SQL Services – SQL Data Services Database | Cloud Communication & Sync Patterns | | | | | Load Balancer Windows Azure Hosting Project – Web Roles | Service Bus .NET Services – Service Bus | Live Mesh Desktop Live Services – Live Mesh Desktop / Live Framework | Live Mesh Feed Live services – Live Mesh Feeds / Live Framework | Cloud Security Patterns | | | | | Authentication Service Live Service – Windows Live ID | Access Control Service .NET Services – Access Control Service | | |
Lors du déploiement d’une application Azure, il faut publier l’application packagée mais aussi joindre le fichier de configuration de votre application (ServiceConfiguration.cscfg). La configuration est faite en 2 étapes : - Définir la configuration dans un fichier ServiceDefinition.csdef : Une fois l’application packagée, la définition reste fixe.
- Attribuer les clés/valeurs dans le fichier de configuration ServiceConfiguration.cscfg : même après déploiement de l’application, il est possible de modifier la configuration du service et d’uploader la nouvelle configuration.
Généralement, dans ces fichiers on y met les informations classiques telles que l’adresse des différents Endpoints de l’Azure Storage, les identifiants relatifs au compte utilisé, etc. : (ServiceDefinition.csdef) <?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="RSSAggregator" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole">
<ConfigurationSettings>
<Setting name="TableStorageEndpoint" />
<Setting name="BlobStorageEndpoint" />
<Setting name="QueueStorageEndpoint"/>
<Setting name="AccountName" />
<Setting name="AccountSharedKey" />
</ConfigurationSettings>
<InputEndpoints>
<!-- Must use port 80 for http and port 443 for https when running in the cloud -->
<InputEndpoint name="HttpIn" protocol="http" port="80" />
</InputEndpoints>
</WebRole>
<WorkerRole name="WorkerRole">
<ConfigurationSettings>
<Setting name="TableStorageEndpoint" />
<Setting name="BlobStorageEndpoint" />
<Setting name="QueueStorageEndpoint"/>
<Setting name="AccountName" />
<Setting name="AccountSharedKey" />
</ConfigurationSettings>
</WorkerRole>
</ServiceDefinition>
plutôt classique : (ServiceConfiguration.cscfg)
<?xml version="1.0"?>
<ServiceConfiguration serviceName="RSSAggregator" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Role name="WebRole">
<Instances count="1"/>
<ConfigurationSettings>
<Setting name="TableStorageEndpoint" value="http://javazure.table.core.windows.net" />
<Setting name="BlobStorageEndpoint" value="http://javazure.blob.core.windows.net"/>
<Setting name="QueueStorageEndpoint" value="http://javazure.queue.core.windows.net"/>
<Setting name="AccountName" value="unnomdecompte" />
<Setting name="AccountSharedKey" value="unesharedkey" />
</ConfigurationSettings>
</Role>
<Role name="WorkerRole">
<Instances count="1"/>
<ConfigurationSettings>
<Setting name="TableStorageEndpoint" value="http://unnomdecompte.table.core.windows.net" />
<Setting name="BlobStorageEndpoint" value="http://unnomdecompte.blob.core.windows.net"/>
<Setting name="QueueStorageEndpoint" value="http://unnomdecompte.queue.core.windows.net"/>
<Setting name="AccountName" value="unnomdecompte" />
<Setting name="AccountSharedKey" value="unesharedkey" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>
Imaginons par exemple que vous ayez, par soucis d’économie des ressources (et donc du portefeuille, oui oui Azure va devenir payant), un WorkerRole qui s’endort après un bouclage, pendant 30 mns. Pour diverses raison, vous avez besoin de plus de fréquence de traitement et un sommeil d’une durée de 15mns max s’impose (travailler plus, gagner…). La solution est de définir dans la configuration un temps de sommeil TimeToSleep: (ServiceDefinition.csdef)
<WorkerRole name="WorkerRole">
<ConfigurationSettings>
<Setting name="TableStorageEndpoint" />
<Setting name="BlobStorageEndpoint" />
<Setting name="QueueStorageEndpoint"/>
<Setting name="AccountName" />
<Setting name="AccountSharedKey" />
<Setting name="TimeToSleep"/>
</ConfigurationSettings>
</WorkerRole>
Puis d’y affecter une valeur dans le fichier de configuration ServiceConfiguration.cscfg
<Role name="WorkerRole">
<Instances count="1"/>
<ConfigurationSettings>
<Setting name="TableStorageEndpoint" value="http://unnomdecompte.table.core.windows.net" />
<Setting name="BlobStorageEndpoint" value="http://unnomdecompte.blob.core.windows.net"/>
<Setting name="QueueStorageEndpoint" value="http://unnomdecompte.queue.core.windows.net"/>
<Setting name="AccountName" value="unnomdecompte" />
<Setting name="AccountSharedKey" value="unesharedkey" />
<Setting name="TimeToSleep" value="30"/>
</ConfigurationSettings>
</Role>
Il ne restera plus qu’à modifier la configuration soit en envoyant la nouvelle configuration, soit en la modifiant directement sur le portail Azure!
Pour récupérer la configuration depuis le code il faut passer par le RoleManager :
RoleManager.GetConfigurationSetting("TimeToSleep");
Exemple :
public class WorkerRole : RoleEntryPoint
{
private Thread t1;
private int TimeToSleep;
public override bool Initialize()
{
Int32.TryParse(RoleManager.GetConfigurationSetting("TimeToSleep"), out TimeToSleep);
t1 = new Thread(MainThread);
return true;
}
public override void Start()
{
t1.Start();
}
public void MainThread()
{
// This is a sample worker implementation. Replace with your logic.
RoleManager.WriteToLog("Information", "Main Thread entry point called");
int iteration = 0;
while (true)
{
// du traitement...
// ...
// ...
Thread.Sleep(TimeToSleep);
}
}
public override RoleStatus GetHealthStatus()
{
// This is a sample worker implementation. Replace with your logic.
return RoleStatus.Healthy;
}
}
En faisant mumuse avec les Azure Table et le Storage Client, je me suis heurté à pleins de petits problèmes par-ci par-là. Dans ce billet, je vais “grandement” m’inspirer de la doc MSDN pour insister sur les problèmes que j’ai rencontré (en vérité, uniquement les parties Partition Key/Row Key et Les champs se sont inspirés de la doc): Vos entités Partition Key et Row Key Ces deux champs en plus du timestamp sont nécessaires. Ils peuvent être spécifiés lors de la création d’une entité (classe dérivée de TableStorageEntity) mais ne doivent pas comporter certains caractères : Les champs Les champs d’une entités peuvent être de type : - Binary
- Bool
- DateTime
- Double
- GUID
- Int
- Long
- String
Attention cependant : Seuls les attributs publics munis de leur get et set seront pris en compte lors de l’insertion de l’entité dans une table. Création des tables Lorsque vous créez des tables (je m’inspire ici du labs fournit par le Azure Training Kit), votre classe héritante de TableStorageDataServiceContext contient à priori la déclaration d’'une ou des tables de votre application : public IQueryable<Foo> FooTable
{
get
{
return this.CreateQuery<Foo>("Bof");
}
}
public IQueryable<RssLink> Urls
{
get
{
return this.CreateQuery<RssLink>("Urls");
}
}
La requête doit comporter absolument le nom de la variable, car c’est sur son nom que sera créée la table dans Azure Storage. Ici ma variable FooTable tentera de requêter sur la table “Bof” alors qu’effectivement, c’est sur la table “FooTable” qu’il faut requêter!
public IQueryable<Foo> FooTable
{
get
{
return this.CreateQuery<Foo>("FooTable");
}
}
public IQueryable<RssLink> Urls
{
get
{
return this.CreateQuery<RssLink>("Urls");
}
}
Requêter sur des tables
Des opérations Linq sont possibles mais très limitées : seuls From, Where et Take sont supportés. Petite astuce, il faut transformer IQueryable<T> en IEnumerable<T> avec la méthode suivante par exemple :
public IEnumerable<Foo> ProcessFooQuery(IQueryable<Foo> resultset)
{
TableStorageDataServiceQuery<Foo> query = new TableStorageDataServiceQuery<Foo>(resultset as DataServiceQuery<Foo>);
IEnumerable<Foo> queryResults = query.ExecuteAllWithRetries();
return queryResults;
}
On pourra imaginer l’utilisation suivante :
public bool FooTableContains(Foo foo)
{
var result = from f in FooTable
where f.Owner.Equals(foo.Owner) &
f.Title.Equals(foo.Title)
select f;
return ProcessFooQuery(result).Count() > 0;
}
Si vous avez besoin d’écrire temporairement des fichiers depuis votre espace Windows Azure, sachez que vous pouvez utiliser un espace de stockage isolé en spécifiant le LocalStorage dans le fichier de configuration du service (ServiceDefinition.cscfg) : <?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="RSSAggregator" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole">
<ConfigurationSettings>
...
</ConfigurationSettings>
<LocalStorage name="rssrepository" sizeInMB="2"/>
<InputEndpoints>
<!-- Must use port 80 for http and port 443 for https when running in the cloud -->
<InputEndpoint name="HttpIn" protocol="http" port="80" />
</InputEndpoints>
</WebRole>
<WorkerRole name="WorkerRole">
</WorkerRole>
</ServiceDefinition>
Vous pourrez alors accéder de la manière suivante :
ILocalResource myIO = RoleManager.GetLocalResource("rssrepository");
string pathToFile = Path.Combine(myIO.RootPath, "somefile.xml");
Il est alors possible d’écrire dans le fichier “somefile.xml” :
FileStream rssStream = new FileStream(pathToFile, FileMode.Create,FileAccess.ReadWrite);
D’un point de vue utilisateur ok! Silverlight était déjà dispo! Mais d’un point de vue Développeur, le plugin eclipse4SL est actuellement en Technical Preview sur Mac, la version proposée supporte toutes les features de la version Windows. Annoncé au Mix 09, officialisé sur le blog de la team eclipse4sl, Silverlight prend une nouvelle dimension. 
Je viens de publier un article sur MSDN qui détaille les étapes basiques pour déployer un service WCF sur Azure et l'interroger avec des applications Java et PHP en SOAP
l'article en question :
http://msdn.microsoft.com/fr-fr/dd560590.aspx
1. Création du service Nous allons débuter par créer un projet de type Cloud Service dans Visual Studio : · Ouvrez Visual Studio en privilège élevé (clic droit et exécuter en tant qu’administrateur ) · Créez un nouveau projet de type Web Cloud Service : Allez dans File àNew àProject, repérer l’onglet Cloud Service et sélectionnez Web Cloud Service. Nommez-le SimpleWCFHosting  Le projet Web Cloud Service est un projet qui expose un Web Role sur Windows Azure et est accessible depuis un environnement Web tandis que le Worker Cloud Service expose un Worker Role et est apparenté à un processus fonctionnant en parallèle, il permet par exemple d’effectuer des tâches de traitement. Le projet Cloud Service référence un Web et/ou un Worker Role. Il gère la configuration de l’environnement de ces services. Vous verrez apparaitre dans l’onglet Solution Explorer 2 projets : Un Cloud Service et un Web Role. C’est dans le Web Role que nous allons exposer notre service WCF. · Ajoutez un service WCF au Web Role : Clic droit sur la racine du projet Web Role et Add à New Item à WCF Service. Nommez le HelloWorld.svc  Une fois le service créé, il faut modifier son binding en basicHttpBinding (par défaut en wsHttpBinding). Pour cela, éditez le fichier Web.config présent dans le Web Role et repérez l’attribut binding=’’wsHttpBinding’’ dans le tag system.serviceModel  Remplacez cette valeur par ‘’basicHttpBinding’’. <system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleWCFHosting_WebRole.HelloWorldBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="SimpleWCFHosting_WebRole.HelloWorldBehavior"
name="SimpleWCFHosting_WebRole.HelloWorld">
<endpoint address="" binding="basicHttpBinding" contract="SimpleWCFHosting_WebRole.IHelloWorld">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
Nous allons maintenant modifier le service afin qu’il nous renvoie un message du type :
04/03/2009 11:38:03 : Hello Bill from Windows Azure
Editez l’interface du service IHelloWorld.cs et remplacer l’opération DoWork par celle-ci
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace SimpleWCFHosting_WebRole
{
// NOTE: If you change the interface name "IHelloWorld" here, you must also update the reference to "IHelloWorld" in Web.config.
[ServiceContract]
public interface IHelloWorld
{
[OperationContract]
String SayHello(String name);
}
}
Dans l’implémentation du service HelloWorld.svc.cs, il faut implémenter l’opération SayHello :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace SimpleWCFHosting_WebRole
{
// NOTE: If you change the class name "HelloWorld" here, you must also update the reference to "HelloWorld" in Web.config.
public class HelloWorld : IHelloWorld
{
public String SayHello(String name)
{
return String.Format("{0} : Hello {1} from Windows Azure",DateTime.UtcNow,name);
}
}
}
2. Exposition du service WCF
Compilez et lancez le projet (F5), vous remarquerez que deux processus se lancent : 
Ces 2 processus simulent l’environnement de Windows Azure :
Le Development Storage simule Windows Azure Storage (Blobs, Table et Queues)
Le Development Fabric simule l’environnement d’exécution des Web et Worker Roles
Le service HelloWorld.svc est accessible à l’adresse suivante : http://127.0.0.1/HelloWorld.svc
Et la description ici : http://127.0.0.1/HelloWorld.svc?wsdl
Pour déployer sur Windows Azure, suivez ces posts de Gregory Renard :
Windows Azure Services : Creez votre premiere application On the Cloud – Part5
Remarque : L’environnement local simule toute l’expérience “On The Cloud”, si vous ne disposez pas de token d’invitation ce n’est pas grave! Préparez vous en local en attendant de le recevoir ;)
Les 10 derniers blogs postés
- TechDays Paris 2010 : Plan de migration vers SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 37 minutes
- TechDays Paris 2010 : La pleinière du second jour par Blog Technique de Romelard Fabrice le il y a 1 heure et 42 minutes
- Visual Studio 2010 and .NET Framework 4 Release Candidate now available par Matthieu MEZIL le il y a 4 heures et 48 minutes
- Création d’une base de donnée sous SQL Azure par Le Blog (Vert) d'Arnaud JUND le il y a 5 heures et 45 minutes
- TechDays Paris 2010 : Les Services d’applications dans SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 15 heures et 44 minutes
- TechDays Paris 2010 : La GED et SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 19 heures et 42 minutes
- TechDays Paris 2010 : SharePoint 2010 et Les réseaux sociaux par Blog Technique de Romelard Fabrice le il y a 20 heures et 56 minutes
- TechDays Paris 2010 : SharePoint 2010 – Description et nouveautés par Blog Technique de Romelard Fabrice le il y a 22 heures et 3 minutes
- TechDays Paris 2010 : Pleinière Lundi par Blog Technique de Romelard Fabrice le il y a 22 heures et 7 minutes
- [Techdays 2010] #02 - Nouveautés de SharePoint 2010 par Le petit blog de Pierre / Pierre's little blog le il y a 22 heures et 45 minutes
|