asyncResult.AsyncWaitHandle.WaitOne ();\r
AsyncResult async = (AsyncResult) asyncResult;\r
GetResponseCallback cb = (GetResponseCallback) async.AsyncDelegate;\r
- WebResponse webResponse = cb.EndInvoke(asyncResult);\r
+ FileWebResponse webResponse = (FileWebResponse) cb.EndInvoke(asyncResult);\r
asyncResponding = false;\r
+ if (webResponse.HasError)\r
+ throw webResponse.Error;\r
return webResponse;\r
}\r
\r
}\r
FileStream fileStream = null;\r
try {\r
- fileStream = new FileWebStream (this, FileMode.Open,\r
- FileAccess.Read, FileShare.Read);\r
+ fileStream = new FileWebStream (this, FileMode.Open, FileAccess.Read, FileShare.Read);\r
+ this.webResponse = new FileWebResponse (this.uri, fileStream);\r
} catch (Exception ex) {\r
- throw new WebException (ex.Message, ex);\r
+ this.webResponse = new FileWebResponse (this.uri, new WebException (ex.Message, ex));\r
}\r
- this.webResponse = new FileWebResponse (this.uri, fileStream);\r
- return (WebResponse) this.webResponse;\r
+ return this.webResponse;\r
}\r
\r
void ISerializable.GetObjectData (SerializationInfo serializationInfo, StreamingContext streamingContext)\r
private FileStream fileStream;\r
private long contentLength;\r
private WebHeaderCollection webHeaders;\r
- private bool disposed = false;\r
+ private bool disposed;\r
+ Exception exception;\r
\r
// Constructors\r
\r
throw new WebException (e.Message, e);\r
}\r
}\r
+\r
+ internal FileWebResponse (Uri responseUri, WebException exception)\r
+ {\r
+ this.responseUri = responseUri;\r
+ this.exception = exception;\r
+ }\r
\r
#if NET_2_0\r
[Obsolete ("Serialization is obsoleted for this type", false)]\r
}\r
\r
// Properties\r
+ internal bool HasError {\r
+ get { return exception != null; }\r
+ }\r
+\r
+ internal Exception Error {\r
+ get { return exception; }\r
+ }\r
\r
public override long ContentLength {\r
get {\r
if (tp_item_end_func)
tp_item_end_func (tp_item_user_data);
ac = (ASyncCall *) ar->object_data;
- if (ac->msg->exc != NULL)
+ if (ac && ac->msg && ac->msg->exc != NULL)
mono_unhandled_exception (ac->msg->exc);
mono_domain_set (mono_get_root_domain (), TRUE);
}