アプリケーション固有のドキュメントをアップロードするためのAzureにはBlobストレージコンテナがあり、ファイルアップロードプロセス中に特定のファイルのメタデータが保存されるAzure Sql Dbがあります。このアップロードプロセスは、Sql Dbにメタデータのレコードがなく、その逆のファイルがストレージに存在しないように、一貫性が必要です。 フロントエンドから取得したファイルのリストを、マルチパートのHttpContentとしてアップロードしています。 Web Apiコントローラから、httpContent、ファイル名、およびファイルがアップロードされるフォルダパスを渡すアップロードサービスを呼び出します。 Web APIのコントローラ、サービスメソッド、リポジトリはすべてasynです。ここでAzure BlobストレージとAzure SQL Dbアトミックトランザクション
var files = await this.uploadService.UploadFiles(httpContent, fileNames, pathName);
サービスメソッドです:
public async Task<List<FileUploadModel>> UploadFiles(HttpContent httpContent, List<string> fileNames, string folderPath)
{
var blobUploadProvider = this.Container.Resolve<UploadProvider>(
new DependencyOverride<UploadProviderModel>(new UploadProviderModel(fileNames, folderPath)));
var list = await httpContent.ReadAsMultipartAsync(blobUploadProvider).ContinueWith(
task =>
{
if (task.IsFaulted || task.IsCanceled)
{
throw task.Exception;
}
var provider = task.Result;
return provider.Uploads.ToList();
});
return list;
}
サービスメソッドがSystem.Net.Http.MultipartFileStreamProviderから導出され、カスタマイズアップロードプロバイダを使用して、我々が使用してこの問題を解決します依存関係リゾルバ。 その後、これらのファイルごとにmeta detaモデルを作成し、Entityフレームワークを使用してDbに保存します。理想的な状況では完全なプロセスが正常に機能します。
アップロードプロセスが成功した場合、問題があるが、何とかDB操作は失敗し、その後、我々は、BLOBストレージにアップロードされたファイルを持っていますが、SQL DBに対応するエントリがないため、データの矛盾があります。
- AzureのアピのApp
- Azureブロブストレージ
- Web APIを
- の.Net 4.6.1
- :後
は、システムで使用される様々な技術ですエンティティフレームワーク6.1.3
私はどのように
(のみDBの作品)、ブロブとDbのために働いていないようで一貫性を保つためのTransactionScopeを使用して試してみました私たちはこの問題を解決しますか?
内蔵またはサポートされている機能はありますか?
この場合のベストプラクティスは何ですか?
あなたの答えをありがとう、私はあなたが言ったように手動で行う必要がありますね。 –