我的目标是Windows Phone 7.5及以上的项目目标。
我使用一种方法来获取在线图像并检查图像的类型,如果它是gif,那么我将它转换为jpg并将其绑定到图像控件,如果jpg和png,只需绑定没有编码。< BR />
但是下面的代码会频繁地抛出错误,“远程服务器返回错误:NotFound”,为什么?我已经抓住了WebException。
public void GetOnlineImageAndReturnJPGStream(Action<Stream, string> callback, string uriString)
{
string errorstring = "";
try
{
WebClient wc = new WebClient();
wc.Headers[HttpRequestHeader.Referer] = "http://www.xici.net";
wc.AllowReadStreamBuffering = true;
wc.OpenReadCompleted += (s, e) =>
{
if (e.Error == null && !e.Cancelled)
{
//check pic type
ImageTypeCheck.ImageType incomingIMGType = ImageTypeCheck.getImageType(e.Result);
switch (incomingIMGType)
{
case ImageTypeCheck.ImageType.Gif://if gif
//deal with gif
case ImageTypeCheck.ImageType.Null:
case ImageTypeCheck.ImageType.Bmp:
//deal with bmp
case ImageTypeCheck.ImageType.Jpg:
case ImageTypeCheck.ImageType.Png:
//deal with jpg and png
}
}
else
{
errorstring = e.Error.Message;
callback(e.Result, errorstring);
}
};
wc.OpenReadAsync(new Uri(uriString, UriKind.Absolute));
}
catch (WebException webEx)
{
App.ShowToastNotification(webEx.Message);
}
}
未处理的例外情况如下:
{System.Net.WebException:远程服务器返回错误: 未找到。 ---&GT; System.Net.WebException:远程服务器返回了一个 错误:NotFound。在 System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult的 asyncResult)at System.Net.Browser.ClientHttpWebRequest&LT;&GT; C_ DisplayClasse.b _d(对象 sendState)at System.Net.Browser.AsyncHelper&LT;&GT; C_ DisplayClass1.b _0(对象 sendState)---内部异常堆栈跟踪结束--- at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 在System.Net.OpenReadCompletedEventArgs.get_Result()处 xicihutong.DataServiceAgent.ServiceAgent&LT;&GT; C_ DisplayClassa.b _8(对象 s,OpenReadCompletedEventArgs e)at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e) 在System.Net.WebClient.OpenReadOperationCompleted(Object arg)} [System.Net.WebException]:{System.Net.WebException:远程服务器返回错误:NotFound。 ---&GT; System.Net.WebException:The 远程服务器返回错误:NotFound。在 System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult的 asyncResult)at System.Net.Browser.ClientHttpWebRequest&LT;&GT; C_ DisplayClasse.b _d(对象 sendState)at System.Net.Browser.AsyncHelper&LT;&GT; C_ DisplayClass1.b _0(对象 sendState)---内部异常堆栈跟踪结束--- at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 在System.Net.OpenReadCompletedEventArgs.get_Result()处 xicihutong.DataServiceAgent.ServiceAgent&LT;&GT; C_ DisplayClassa.b _8(对象 s,OpenReadCompletedEventArgs e)at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e) 在System.Net.WebClient.OpenReadOperationCompleted(Object arg)} _className:“System.Net.WebException” _data:null _dynamicMethods:null _exceptionMethod:null _exceptionMethodString:null _helpURL:null _HResult:-2146233079 innerException:{System.Net.WebException:远程服务器返回错误:NotFound。在 System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult的 asyncResult)at System.Net.Browser.ClientHttpWebRequest&LT;。&以及c _DisplayClasse.b_ d(对象 sendState)at System.Net.Browser.AsyncHelper&LT;。&以及c _DisplayClass1.b__0(对象 sendState)} _ipForWatsonBuckets:0 _message:“远程服务器返回错误:NotFound。” _remoteStackIndex:0 _remoteStackTraceString:null _source:null _stackTrace:{sbyte [96]} _stackTraceString:null _watsonBuckets:{byte [5616]} _xcode:-532462766 xptrs:0 数据:{System.Collections.ListDictionaryInternal} HelpLink:null HResult:-2146233079 InnerException:{System.Net.WebException:远程服务器返回错误:NotFound。在 System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult的 asyncResult)at System.Net.Browser.ClientHttpWebRequest&LT;。&以及c _DisplayClasse.b_ d(对象 sendState)at System.Net.Browser.AsyncHelper&LT;。&以及c _DisplayClass1.b__0(对象 sendState)} IPForWatsonBuckets:0 消息:“远程服务器返回错误:NotFound。” RemoteStackTrace:null 来源:“系统” StackTrace:“在System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()\ r \ n 在System.Net.OpenReadCompletedEventArgs.get_Result()\ r \ n at xicihutong.DataServiceAgent.ServiceAgent&LT;&GT; C_ DisplayClassa.b _8(对象 s,OpenReadCompletedEventArgs e)\ r \ n at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)\ r \ n在System.Net.WebClient.OpenReadOperationCompleted(Object ARG)” WatsonBuckets:{byte [5616]}
为什么呢?以及如何处理?
不幸的是,我发布的错误消息是一个Unhandle异常并且告诉我我们的服务器返回错误,但我认为我已经在Unhandle异常中捕获了404错误,为什么它还是抛出它呢?
答案 0 :(得分:1)
要获取有关异常原因的更多详细信息,请检查Status
对象的WebException
属性。如果您的应用发送 https 请求,也可能是证书问题。
答案 1 :(得分:1)
您无法以所描述的方式捕获异常,因为当您访问OpenReadCompleted
属性时,它会在Result
事件处理程序中异步引发。如果发生错误,您将无法获得Result
,因此会引发异常。为了处理它,将try catch
块放在事件处理程序中,但实际上为了防止异常,只是在发生错误时不要将Result
传递给回调。
答案 2 :(得分:0)
调试它并尝试在浏览器中打开您正在下载的图像的完整地址。也许在网址中有一个丢失的斜线或其他内容。