ローカルでSQL Filestreamを使用することはできましたが、SQL認証を使用するリモートSQLサーバーにファイルをアップロードしようとすると、アクセス拒否例外が発生します。どうやら、SQL FilestreamはWindows認証(統合セキュリティ= true)でしか動作していますが、現在のところSQL認証では機能していません。SQL filestream認証のベストプラクティス
本番環境でWindows認証を実際に使用する人はいないので、この制限を克服する方法を知りたいだけです。ベストプラクティスは何ですか? FILESTREAMを使用するときは、実際に統合認証を使用する必要があります
public static void AddItem(RepositoryFile repository, byte[] data)
{
using (var scope = new TransactionScope())
{
using (var db = new MyEntities()) // DBContext
{
db.RepositoryTable.AddObject(repository);
db.SaveChanges();
}
using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
using (var cmd = new SqlCommand(string.Format("SELECT Data.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT() FROM dbo.RepositoryTable WHERE ID='{0}'", repository.ID), con)) // "Data" is the column name which has the FILESTREAM. Data.PathName() gives me the local path to the file.
{
cmd.Connection.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var path = reader.GetString(0);
var transactionContext = reader.GetSqlBytes(1).Buffer;
var fileStream = new SqlFileStream(path, transactionContext, FileAccess.Write);
fileStream.Write(contents, 0, contents.Length); // I get the error at this line.
fileStream.Close();
}
}
}
scope.Complete();
}
}
例外が発生しているコードを表示できますか? –
"本番環境でWindows認証を実際に使用する人はいません"(Windowsサービス、Webアプリケーション、およびデスクトップアプリケーション)のすべての場合に該当しない実装があります –
@ Philhunt - コードスニペット。バイトをファイルに書き込もうとするとエラーが発生します。プロセスは明らかにファイルにアクセスできません。 – tempid