2011-07-02 2 views
0

Je suis en train de travailler sur Windows Azure en créant un projet ASP.NET MVC, j'ai vérifié le WAPTK (Kit de formation Windows Azure Platform), Google et les réponses à ma question, mais je n'ai pas trouvé la réponse. Dans un projet ASP.NET MVC, dans quel fichier puis-je créer des conteneurs pour le stockage en nuage? (Dans le WAPTK, il y a un TP qui utilise des formulaires Web et place des conteneurs de stockage dans la classe partielle _Default.)Dans Windows Azure, dans quel fichier dois-je stocker des informations de stockage pour ASP.NET MVC?

Répondre

1

Dans un projet ASP.NET MVC, dans quel fichier puis-je créer des conteneurs pour le stockage cloud? (Dans le WAPTK, il y a un laboratoire pratique qui utilise webforms et met des conteneurs de stockage dans la classe partielle _Default.)

En général, je vous recommande de mettre en place l'accès à conteneurs (y compris le créer) dans une bien classe encapsulée - se cachant de préférence derrière une interface pour faciliter la testabilité.

Je recommande:

  • mis cette classe et son interface dans une bibliothèque de classes (pas dans votre projet ASP.Net)
  • mettre les détails de configuration dans les fichiers csdef/cscfg
  • si vous ne prévoyez d'utiliser une liste fixe de conteneurs, alors:
    • créer ces avant d'installer votre application - par exemple à partir d'une application simple ligne de commande
    • ou créer ces d'un appel dans l'init Global.asax
  • si vous envisagez de créer dynamiquement des conteneurs (par exemple pour différents utilisateurs ou actions) puis créer ces de contrôleur/service code tel que requis - par exemple lorsqu'un utilisateur s'inscrit ou lorsqu'une action est exécutée pour la première fois.
  • si les actions peuvent se produire plusieurs fois et vous ne sais vraiment pas si le conteneur sera là ou pas, trouver un moyen (par exemple une table de hachage ou en sql tableau persistant en mémoire) pour vous assurer que vous n » t besoin d'appeler continuellement CreateIfNotExist - n'oubliez pas que chaque appel à CreateIfNotExist ralentira votre application et vous coûtera de l'argent.
  • pour les opérations d'accès « normal » comme lecture/écriture/suppression, ceux-ci seront généralement à partir du code Controller - ou à partir du code de service assis derrière un contrôleur

En cas de doute, pensez un peu comme « comment ce que je partitionner ma logique si je créais des dossiers sur un disque local - ou sur un lecteur réseau partagé »

Hope qui aide un peu.

Stuart

+0

Cela a aidé un peu, merci pour votre temps. –

0

Je ne suis pas sûr de vous avoir bien compris, mais en général les fichiers et Azure ne sont pas compatibles bien. Toutes les modifications stockées sur le système de fichiers local sont volatiles et ne peuvent durer que jusqu'à l'instance Azure en cours. Vous pouvez cependant créer un blob et mount it as a local drive, ce qui rend les données persistantes. Cette approche a quelques limitations, car elle permettra une écriture d'instance azure et un maximum de 8 lecteurs. Donc, à la place, vous devriez probablement utiliser des blobs plutôt que des fichiers. Le problème de savoir quel blob accéder serait alors résolu en utilisant le stockage de table Azure pour indexer les blobs.

Je suis récemment allé à une présentation où le présentateur avait beaucoup étudié le stockage de table Azure et ses conclusions étaient que la limitation des clés de partition à des groupes de 100-1000 éléments donnerait les meilleures performances. (Les clés de partition sont utilisées en interne par azure pour déterminer les données à regrouper.)

+0

Il est évident que je dois être un peu plus clair. –

0

Vous devez absolument utiliser le stockage BLOB pour vos fichiers. Ce n'est pas particulièrement difficile et comme il s'agit d'un nouveau projet, il n'est pas nécessaire d'utiliser Azure Drives.

Si vous utilisez simplement le stockage de blob pour servir des images pour votre site, vous pouvez les référencer avec une étiquette normale dans votre code html par exemple

<img src="http://myaccountname.blob.core.windows.net/containername/filename"> 

Cela ne fonctionnera que si le fichier ou le conteneur est partagé et pas sécurisé. C'est bien si vous ne faites que du contenu statique sur les pages html.

Si vous voulez avoir un accès sécurisé aux blobs pour un site sécurisé, vous devez faire quelques choses, d'abord votre site Web devra savoir comment accéder à vos blobs.

dans votre fichier servicedefinition.csdef vous devrez inclure

<Setting name="StorageAccount" /> 

puis ajoutez

<Setting name="StorageAccount" value="DefaultEndpointsProtocol=https; 
AccountName=[youraccountname];AccountKey=[youraccountkey]" /> 

à votre fichier serviceconfiguration.csfg.

Ensuite, vous pouvez utiliser le kit de développement Windows Azure pour accéder à ce compte depuis votre rôle Web. A partir de

Dim Account As CloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("StorageAccount")) 
Dim blobClient As CloudBlobClient = Account.CreateCloudBlobClient 

De là, vous pouvez

  • lecture/écriture à blobs
  • blobs Supprimer
  • liste blobs
  • trouver du temps urls limité en utilisant des signatures d'accès partagé.

Il existe une excellente ressource here de Steve Marx.Lequel, bien qu'il s'agisse d'accéder au stockage blob de Silverlight que vous n'utilisez pas, vous donne beaucoup d'informations en un seul endroit.

Votre question n'a pas été très précis, mais cela devrait vous donner une idée où commencer.

@Faester est correcte, vous aurez probablement besoin d'un espace de stockage des ressources table ou SQL Azure pour stocker des références à ces fichiers.

Questions connexes