Я имею дело с API, который работает через https. Это просто: мое приложение отправляет данные, получает ответы. Мои данные хранятся в BLOB-объекте Azure, и я загружаю их прямо в поток http следующим образом:
//form request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destination.HostURL);
request.ContentType = "text/xml; encoding='utf8'";
request.Headers.Add("Cookie", headers.Get("Set-Cookie"));
request.ContentLength = contentLength;
//get blob reference
CloudStorageAccount = CloudStorageAccount.Parse(storageConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
CloudBlob blockBlob = container.GetBlobReference(fileName);
blockBlob.FetchAttributes();
//write blob content to request stream
Stream requestStream = request.GetRequestStream();
blockBlob.DownloadToStream(requestStream);
У меня вопрос ... если по какой-то причине происходит сбой blockBlob.DownloadToStream()
, например, если он выдает (System.Net.WebExceptionStatus)Status: ConnectionClosed
, имеет ли смысл сбросить позицию потока на 0 и повторить попытку blockBlob.DownloadToStream()
, или он просто сохранит делать то же самое, и я должен вместо этого сделать новый запрос?
В основном, куда поместить мои попытки: поток записи, весь запрос или оба?
Я сейчас сижу на повторных попытках обоих, но я понятия не имею, как работает поток HttpWebRequest и не является ли это ненужным усложнением, чтобы вместо этого вставить это в компьютер повторной попытки.