FILESTREAM をサポートする SQL データベースをセットアップし、WebAPI を介して SqlFileStream を使用してデータベースから取得したファイルをブラウザーにストリーミングしようとしています。
何らかの理由で機能しませんが、適切なエラー メッセージが表示されません。ブラウザーは接続を中止するだけで、Fiddler も有用なものを何も表示せず、VS でエラーがスローされないようです。
public HttpResponseMessage Get(Guid id)
{
if(id == null || id == Guid.Empty)
return Request.CreateResponse(HttpStatusCode.BadRequest);
try
{
FileStreamContext fsc = null;
Document document = null;
using(var transaction = new TransactionScope())
using (var db = new MyEntities())
{
try
{
fsc = db.Database.SqlQuery<FileStreamContext>("SELECT [File].PathName() AS InternalPath, GET_FILESTREAM_TRANSACTION_CONTEXT() AS TransactionContext FROM Document WHERE id={0}", id).First();
}
catch (Exception e)
{
Debug.Print(e.ToString());
}
document = db.Documents.Where(doc => doc.ID == id).Single();
var fileStream = new SqlFileStream(fsc.InternalPath, fsc.TransactionContext, FileAccess.Read);
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StreamContent(fileStream);
//response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
//response.Content.Headers.ContentDisposition.FileName = document.FileName;
response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(document.ContentType);
return response;
}
}
catch (Exception e)
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
TransactionScope が早期に閉じられていることに問題があるのではないかと思いますか? エラーメッセージが表示されない理由はわかりません。
WebApiを介してSqlFileStreamをストリーミングする適切な方法は何ですか?