В моем веб-приложении на C # .NET есть простой односторонний веб-сервис.Мне нужно скачать изображение с данного URL и сохранить его на моем сервере.
Однако, каждый раз, когда я звоню в сервис, он работает отлично.В другой раз я получаю исключение «Поток был прерван» в строке webClient.DownloadFile.
Я читал, что WebClient использует httpWebRequest, который требует доступа к HttpContext.Current.Это правда?Если так, то почему он может получить к нему доступ буквально через раз?
Я пытался добавить следующие строки перед моим вызовом:
Служба WebService = new WebService ();
HttpContext.Current = service.Context;
Ноэто не имеет значения.
Я запустил службу 10 раз, вот результаты:
1: Успех
2: Исключение: поток был прерван.Трассировка стека: в System.Net.ConnectStream.Read (буфер Byte [], смещение Int32, размер Int32) в System.Net.WebClient.DownloadBitsState.RetrieveBytes (Int32 & bytesRetrieved) в System.Net.WebClient.DownloadBits (запрос WebRequest, потокwriteStream, CompletionDelegate completeDelegate, AsyncOperation asyncOp) в System.Net.WebClient.DownloadFile (адрес Uri, строковое имя файла) ...
3: успех
4: исключение: поток был прерван.Трассировка стека: в System.Net.ConnectStream.Read (буфер Byte [], смещение Int32, размер Int32) в System.Net.WebClient.DownloadBitsState.RetrieveBytes (Int32 & bytesRetrieved) в System.Net.WebClient.DownloadBits (запрос WebRequest, потокwriteStream, CompletionDelegate completeDelegate, AsyncOperation asyncOp) в System.Net.WebClient.DownloadFile (адрес Uri, строковое имя файла) ...
5: успех
6: исключение: поток был прерван.Трассировка стека: в System.Net.WebClient.DownloadBitsState.SetResponse (ответ WebResponse) в System.Net.WebClient.DownloadBits (запрос WebRequest, поток writeStream, асинхронное завершение Deelegate, AsyncOperation asyncOp) в System.Net.WareF (System.Net.WebF)Строка fileName) ...
7: успех
8: исключение: поток был прерван.Трассировка стека: в System.Net.WebClient.DownloadBitsState.SetResponse (ответ WebResponse) в System.Net.WebClient.DownloadBits (запрос WebRequest, поток writeStream, асинхронное завершение Deelegate, AsyncOperation asyncOp) в System.Net.WareF (System.Net.WebF)Строка fileName) ...
9: Успех
10: Исключение: поток был прерван.Трассировка стека: в System.Net.WebClient.DownloadBitsState.SetResponse (ответ WebResponse) в System.Net.WebClient.DownloadBits (запрос WebRequest, поток writeStream, асинхронное завершение Deelegate, AsyncOperation asyncOp) в System.Net.WareF (System.Net.WebF)String fileName) ...
Можно ли как-нибудь это сделать ??Все довольно просто.
[WebService(Namespace = "http://nerdliness.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService()]
[System.ComponentModel.ToolboxItem(false)]
public class FileProcessor : System.Web.Services.WebService
{
[WebMethod]
[SoapDocumentMethod(OneWay = true)]
public void ParseFile(String urlOfFileToGrab, String destinationPath)
{
try
{
WebClient client = new WebClient();
client.DownloadFile(urlOfFileToGrab, destinationPath);
client.Dispose();
}
catch (Exception ex)
{
//Log it
}
}
}