Я создал API (MVC) и разместил его на сервере Azure. API получает 1 изображение и 1 текст за раз. Он работает правильно для одного вызова или первого вызова, но после определенного количества вызовов API появляется ошибка ниже.
После установки Microsoft.Azure.DocumentDB
:
Ошибка:
=== Информация о состоянии предварительной привязки === LOG: DisplayName = Microsoft.Azure.Documents.Client, Version = 1.11.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 (полностью заданный) LOG: Appbase = file: /// D: / Project / 002 MVC API / Cherish / API / Cherish.Api / LOG: Initial PrivatePath = D: \ Project \ 002 MVC API \ Cherish \ API \ Cherish.Api \ bin Сборка вызова: Cherish.Domain, версия = 1.0 .0.0, Культура = нейтральный, PublicKeyToken = null. === LOG: Эта привязка запускается в контексте загрузки по умолчанию. ЖУРНАЛ: Использование файла конфигурации приложения: D: \ Project \ 002 MVC API \ Cherish \ API \ Cherish.Api \ web.config ЖУРНАЛ: Использование файла конфигурации хоста: C: \ Users \ Yudiz \ Documents \ IISExpress \ config \ aspnet.config ЖУРНАЛ: использование файла конфигурации компьютера из C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config. ЖУРНАЛ: Ссылка после политики: Microsoft.Azure.Documents.Client, Версия = 1.11.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 ЖУРНАЛ: Попытка загрузки нового файла URL: /// C: / Users / Yudiz / AppData / Local / Temp / Временные файлы ASP.NET / vs / 7b6de7f7 / 4f48effb / Microsoft.Azure.Documents.Client.DLL. ЖУРНАЛ: попытка загрузки нового файла URL: /// C: / Users / Yudiz / AppData / Local / Temp / Temporary ASP.NET Files / vs / 7b6de7f7 / 4f48effb / Microsoft.Azure.Documents.Client / Microsoft.Azure.Documents .Client.DLL. ЖУРНАЛ: попытка загрузки нового файла URL: /// D: / Project / 002 MVC API / Cherish / API / Cherish.Api / bin / Microsoft.Azure.Documents.Client.DLL. WRN: сравнение имени сборки привело к несоответствию: Основная версия ERR: Не удалось завершить настройку сборки (hr = 0x80131040). Зондирование прекращено.
Вот мой фрагмент кода:
var blobHelper = new BlobHelper();
var response = new UploadMediaResponse();
for (var i = 0; i<provider.Files.Count; i++)
{
Guid itemId;
var fileData = await provider.Files[i].ReadAsByteArrayAsync();
if (mediaType == MediaType.Thumbnail)
{
// MediaId is mandatory for Audio & Video media
if (String.IsNullOrWhiteSpace(provider.FormData["mediaId"]))
// ReSharper disable once NotResolvedInText
return ErrorResponse(new ArgumentNullException("mediaId", "MediaId was not provided"));
itemId = new Guid(provider.FormData["mediaId"]);
await blobHelper.Upload(mediaType, accountId, itemId, fileData, timelineEvent.ChildId);
var mediaItem = timelineEvent.Media.Single(m => m.Id == itemId);
mediaItem.HasThumbnail = true;
mediaItem.LastUpdated = DateTime.UtcNow;
await timelineEventRepository.UpdateAsync(timelineEvent, entityDoc.SelfLink);
}
else
{
itemId = await blobHelper.Upload(mediaType, accountId, fileData, timelineEvent.ChildId);
var mediaItem = new TimelineMediaItem
{
Id = itemId,
Available = true,
FileSize = fileData.Length,
Removed = false,
Type = mediaType.ToUpper(),
TaggedChildren = new List<TaggedChild>(),
Created = DateTime.UtcNow,
LastUpdated = DateTime.UtcNow
};
if (fileLengthsRequired)
mediaItem.Length = fileLengths[i];
timelineEvent.Media.Add(mediaItem);
await timelineEventRepository.UpdateAsync(timelineEvent, entityDoc.SelfLink);
}
response.MediaIds.Add(itemId);
}
Декларация для DocumentClient:
public DocumentRepository()
{
Client = new DocumentClient(new Uri(ConfigurationManager.AppSettings["DocumentDbEndpointUrl"]), ConfigurationManager.AppSettings["DocumentDbAuthKey"]);
DatabaseName = ConfigurationManager.AppSettings["DocumentDbDatabaseName"];
PageSize = Int16.Parse(ConfigurationManager.AppSettings["DefaultPageSize"]);
var _database = ReadOrCreateDatabase();
var collection = InitialiseCollection(_database.SelfLink, EntityName);
DocumentsLink = collection.DocumentsLink;
SelfLink = collection.SelfLink;
}
Вот моя ошибка:
Строка ошибки: => Необязательно ({"Сообщение": "Произошла ошибка.", "ExceptionMessage": "Произошла одна или несколько ошибок.", "ExceptionType": "System.AggregateException", "StackTrace": "в системе .Threading.Tasks.Task.ThrowIfExceptional (Boolean includeTaskCanceledExceptions) \ r \ n в System.Threading.Tasks.Task1.GetResultCore (Boolean
waitCompletionNotification) \ r \ n в
System.Threading.Tasks.Task1.get_Result () \ r \ n в Microsoft.Azure.Documents.Linq.DocumentQuery1.GetEnumerator () \ r \ nЗаранее спасибо.
В соответствии с вашей проблемой я предположил, что между вашим клиентом и конечной точкой documentdb возникнут проблемы с подключением после определенного количества вызовов API. Вы можете попытаться создать статический экземпляр Microsoft.Azure.DocumentDB
и добавить политику повтора в свой
var blobHelper = new BlobHelper();
var response = new UploadMediaResponse();
for (var i = 0; i<provider.Files.Count; i++)
{
Guid itemId;
var fileData = await provider.Files[i].ReadAsByteArrayAsync();
if (mediaType == MediaType.Thumbnail)
{
// MediaId is mandatory for Audio & Video media
if (String.IsNullOrWhiteSpace(provider.FormData["mediaId"]))
// ReSharper disable once NotResolvedInText
return ErrorResponse(new ArgumentNullException("mediaId", "MediaId was not provided"));
itemId = new Guid(provider.FormData["mediaId"]);
await blobHelper.Upload(mediaType, accountId, itemId, fileData, timelineEvent.ChildId);
var mediaItem = timelineEvent.Media.Single(m => m.Id == itemId);
mediaItem.HasThumbnail = true;
mediaItem.LastUpdated = DateTime.UtcNow;
await timelineEventRepository.UpdateAsync(timelineEvent, entityDoc.SelfLink);
}
else
{
itemId = await blobHelper.Upload(mediaType, accountId, fileData, timelineEvent.ChildId);
var mediaItem = new TimelineMediaItem
{
Id = itemId,
Available = true,
FileSize = fileData.Length,
Removed = false,
Type = mediaType.ToUpper(),
TaggedChildren = new List<TaggedChild>(),
Created = DateTime.UtcNow,
LastUpdated = DateTime.UtcNow
};
if (fileLengthsRequired)
mediaItem.Length = fileLengths[i];
timelineEvent.Media.Add(mediaItem);
await timelineEventRepository.UpdateAsync(timelineEvent, entityDoc.SelfLink);
}
response.MediaIds.Add(itemId);
}
класс следующим образом:
DocumentRepository.ReadOrCreateDatabase()
- этоtimelineEventRepository
.DocumentRepository
вы имеете в виду, что я должен определитьDocumentClient
внеDocumentRepository
как _6_? Пожалуйста, поправьте меня, если я ошибаюсь. - person Bruce Chen   schedule 10.03.2017timelineEventRepository
:DocumentRepository
- person Chandresh Khambhayata   schedule 10.03.2017