我的 C# .NET Web 应用程序中有一个简单的单向 Web 服务。我需要从给定的 URL 下载图像并将其保存到我的服务器。
但是,每次我调用该服务时,它都能完美运行。其他时候,我在 webClient.DownloadFile 行上收到“线程被中止”异常。
我读过 WebClient 使用需要访问 HttpContext.Current 的 httpWebRequest。这是真的?如果是这样,为什么它可以每隔一段时间访问它?
我尝试在通话之前添加以下几行:
WebService 服务 = 新的 WebService();
HttpContext.Current = service.Context;
但这并没有什么不同。
我运行了 10 次服务,结果如下:
1:成功
2:异常:线程被中止。堆栈跟踪:在 System.Net.WebClient.DownloadBitsState.RetrieveBytes(Int32& bytesRetrieved) 在 System.Net.WebClient.DownloadBits(WebRequest request, Stream System.Net.WebClient.DownloadFile(Uri 地址,字符串文件名)处的 writeStream、CompletionDelegate、completionDelegate、AsyncOperation asyncOp)...
3:成功
4:异常:线程被中止。堆栈跟踪:在 System.Net.WebClient.DownloadBitsState.RetrieveBytes(Int32& bytesRetrieved) 在 System.Net.WebClient.DownloadBits(WebRequest request, Stream System.Net.WebClient.DownloadFile(Uri 地址,字符串文件名)处的 writeStream、CompletionDelegate、completionDelegate、AsyncOperation asyncOp)...
5:成功
6:异常:线程被中止。堆栈跟踪:在 System.Net.WebClient.DownloadBits(WebRequest 请求,流 writeStream,CompletionDelegate completionDelegate,AsyncOperation asyncOp)的 System.Net.WebClient.DownloadBitsState.SetResponse(WebResponse 响应)处 System.Net.WebClient.DownloadFile(Uri 地址,字符串文件名) ...
7:成功
8:异常:线程被中止。堆栈跟踪:在 System.Net.WebClient.DownloadBits(WebRequest 请求,流 writeStream,CompletionDelegate completionDelegate,AsyncOperation asyncOp)的 System.Net.WebClient.DownloadBitsState.SetResponse(WebResponse 响应)处 System.Net.WebClient.DownloadFile(Uri 地址,字符串文件名) ...
9:成功
10:异常:线程被中止。堆栈跟踪:在 System.Net.WebClient.DownloadBits(WebRequest 请求,流 writeStream,CompletionDelegate completionDelegate,AsyncOperation asyncOp)的 System.Net.WebClient.DownloadBitsState.SetResponse(WebResponse 响应)处 System.Net.WebClient.DownloadFile(Uri 地址,字符串文件名)...
有什么办法可以使这项工作?
编辑:回答有关发布代码的问题:没有太多要发布的。这一切都很简单。
[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
}
}
}