2010-07-29 7 views
3

Je crée une application web en utilisant asp.net & WCF comme architecture à trois niveaux, qui ressemble principalement à un site web social. Les utilisateurs peuvent s'inscrire avec le système et ils peuvent télécharger leurs images de profil, documents, clips vidéo, etc. Donc, ce que je veux savoir, c'est quelle est la meilleure façon de stocker ces fichiers? Du coté wcf ou côté application web? Aussi je veux savoir que, si je choisis l'application Web côté pour stocker ces fichiers comme ensemble de dossiers, comment cela fait partager ces dossiers et permettre l'accès à un autre projet différent (comme un client de bureau doit télécharger des fichiers dans ce dossier partagé)?Quelle est la meilleure façon de stocker des fichiers dans une application web (asp.net + wcf)

merci tout d'avance.

Répondre

1

Je pense que la question peut être mieux mis comme ceci:

  • enregistrer dans un dossier dans l'application Web ou à proximité et ont les métadonnées stockées dans une base de données
  • grab les images enregistrées à partir d'une base de données via WCF

La deuxième approche serait probablement plutôt lente. Saisir des informations sur un service, le convertir, utiliser un httphandler avec le type mime correct pour cracher le flux binaire au navigateur ...

La plupart des architectures sont coupées au milieu: sauvegardez les images à proximité, ou dans le Couche d'interface utilisateur et que les métadonnées les concernant soient stockées dans la base de données. Récupération de cette information est la plupart du temps juste un tas de chaînes si facilement récupérées.

Mise à jour pour la nouvelle question:

Depuis les applications WinForms/autres projets ne sont pas dans votre question initiale ce dévie en quelque chose de nouveau. Dans ce cas, vous optez pour certains des scénarios suivants:

  • Utilisez le niveau WCF comme base commune et stockez les images derrière ce service. Comme je l'ai dit, ça va être un supplément pour tirer les tableaux d'octets.
  • Stockez les images dans le niveau de l'interface utilisateur Web et disposez d'un service (asmx ou WCF) pour exposer les images à votre client WinForms.
  • Faites un partage pour le client winforms sur le serveur sur lequel l'interface Web s'exécute et où se trouvent les images. Bien sûr, assurez-vous d'être respectueux de la sécurité et des hacks possibles.

Cela dépend du scénario le plus utilisé. Mon hypothèse est que la couche web ui sera principalement utilisée et que les winforms seront utilisés pour la manipulation d'images? Si tel est le cas, il existe des contrôles tiers ASP.NET disponibles pour une telle manipulation, de sorte que le besoin d'un client Winforms diminuerait.

+0

ok thx.Je pense également que la première approche est la meilleure pour mon application. Comme je le mentionne dans ma deuxième question, disons qu'il existe un client de bureau qui va télécharger des fichiers dans cette application Web? comment puis-je accéder à ces dossiers de fichiers qui sont proches de la couche d'interface utilisateur (application web)? –

+0

Si vous avez une nouvelle question, je suggère que vous commenciez un nouveau fil à la place. Petit à point, les questions ont plus de chance d'obtenir des réponses décentes. – XIII

+0

ok, je vais aller pour un nouveau fil. S'il vous plaît vérifier cela http://stackoverflow.com/questions/3362341/how-to-share-a-folder-in-a-asp-net-web-application-with-a-win-form-client –

1

Cela dépend de la taille que vous attendez de cette chose. Si c'est pour l'Internet plus large et vous vous attendez à ce qu'il devienne grand, le faire sur le serveur Web rendra difficile l'extension de votre application en ajoutant de nouveaux serveurs Web à votre ferme Web. Une approche possible consisterait à télécharger les fichiers physiques sur le serveur Web, à rendre les téléchargements rapides pour les utilisateurs, puis à disposer d'un service d'arrière-plan de coordinateur déclenché par un téléchargement, peut-être à l'aide d'un FileWatcher.Ce service propogate le fichier à tous les noeuds de la batterie de serveurs Web afin que les demandes ultérieures aux autres noeuds trouvent le fichier.

Si elle est une petite application destinée uniquement au sein d'une entreprise, sur le serveur Web est correct, avec les conditions suivantes:

  • Vous avez le contrôle total sur le serveur d'hébergement afin que vous pouvez configurer le autorisations de dossier appropriées.
  • Vous écrivez votre fichier en enregistrant et récupérant le code de manière à pouvoir le déplacer sur les niveaux inférieurs sans trop de douleur. Faites-le via une interface et injectez la mise en œuvre
+0

ok THX. cette application sera hébergée dans un serveur web et il peut être accessible via internet par n'importe quel utilisateur. Le problème est que, si je l'enregistre sur le niveau WCF (niveau business), je dois tout le temps appeler le service WCF pour récupérer les fichiers. Je pense que ce sera une tâche pénible. C'est mieux si je peux enregistrer des fichiers dans la couche d'interface utilisateur et enregistrer les URL de fichiers dans le niveau de données en utilisant le service WCF comme dit XIII. –

+0

Oui, c'est une bonne approche pour des raisons de performance, mais vous devez considérer si vous avez plus d'un serveur Web. Vous aurez besoin d'un moyen de partager les fichiers entre les différents serveurs Web. C'est pourquoi je suggère une combinaison avec un service séparé responsable de la coordination de ces fichiers. –

+0

oui, c'est utile si j'ai plus d'un serveur web. Mais je pense qu'il n'y a aucune chance d'héberger cette application dans plus d'un serveur. Donc, je pense que la solution XIII me convient. –

Questions connexes