2010-05-28 2 views
1

J'ai une application à charge équilibrée ASP.NET (webservice et site web). Il fonctionne sur le serveur SQL. Je dois pouvoir fournir de gros fichiers à télécharger. Cependant, en raison de la situation d'équilibrage de charge, les fichiers sont stockés dans la base de données SQL par opposition au système de fichiers. Le BITS semble être la meilleure approche. J'ai le plein contrôle du client. Cependant, je ne sais pas comment configurer BITS pour lire le fichier de la base de données. Je sais comment écrire le code C# pour cela, mais je ne sais pas comment faire pour que BITS s'y connecte plutôt que de lire le fichier depuis le système de fichiers.Comment pouvez-vous configurer ou étendre BITS (Background Intelligent Transfer Service) pour lire des fichiers à partir d'une base de données Sql Server

Des idées?

+0

Juste une idée ici, mais avez-vous envisagé de stocker le contenu dans S3 et de fournir des téléchargements Bittorent? Utilisation de BitTorrent avec Amazon S3 http://docs.amazonwebservices.com/AmazonS3/latest/index.html?S3Torrent.html –

+0

Quelle version de SQL Server? 2008 a introduit FILESTREAM qui persiste réellement les fichiers sur le système de fichiers et vous permet un accès direct à eux – NotMe

+0

Pourquoi ne pas mettre les fichiers dans un arbre DFS? –

Répondre

2

Vous pouvez créer un gestionnaire http personnalisé en implémentant System.Web.IHttpHandler. La méthode ProcessRequest (contexte HttpContext) est l'endroit où vous allez écrire votre code de récupération de fichiers à partir de la base de données. Comme BITS fonctionne avec des requêtes de plage, vous devrez analyser la valeur de context.Request.Headers ["Range"] pour obtenir les octets de début et de fin demandés. Dans ProcessRequest, vous pouvez lire le binaire de la base de données à l'aide de la méthode SqlCommand.ExecuteReader (CommandBehavior.SequentialAccess) et définir le binaire résultant dans context.Response.OutputStream. N'oubliez pas d'appeler context.Response.Flush() à la fin.

Le HttpHandler personnalisé servira une extension de fichier particulière (par exemple '.file'). C'est ce qui doit être fait dans IIS:

Les deux versions IIS

  1. Ajouter à section dans web.config:

IIS 6.0

  1. Ajoutez l'extension .file (application/x-zip-compressed) en tant que type MIME pour le site Web.

  2. Ajouter une extension d'application (répertoire virtuel de propriétés du site  Configuration  Mappages)

Extension: .file Executable Chemin (s):% windir% \ microsoft.net \ Framework \ v2.0.50727 \ aspnet_isapi.dll % windir% \ Microsoft.NET \ Framework64 \ v2.0.50727 \ aspnet_isapi.dll

IIS 7,0

  1. Ajouter à section en web.config:

  1. Ajouter à la section dans au web.config:

    <mimeMap fileExtension=".file" mimeType="application/x-zip-compressed" /> 
    

Espoir qui est assez pour vous aider à démarrer.

0

Consultez la documentation 2008 en ligne OpenSqlFilestream. Cette API a des exemples qui peuvent vous aider.

Questions connexes