[IronPython] Silverlight and Catching HttpWebRequest Errors

Michael Foord fuzzyman at voidspace.org.uk
Thu Jun 26 02:45:49 PDT 2008


Jimmy Schementi wrote:
> So, did some homework on this. Taking a look at BrowserHttpWebRequest with Reflector, it definitely has a public ProgressFailed event, but it says it's read-only.
>
> Dino/Curt, could this behavior happen because BrowserHttpWebRequest has a methods and events by exactly the same name?
>
>     private EventHandler<NetworkProgressChangedEventArgs> ProgressChanged;
>     private EventHandler<NetworkProgressChangedEventArgs> ProgressCompleted;
>     private EventHandler<NetworkProgressChangedEventArgs> ProgressFailed;
>
>     // Events
>     public event EventHandler<NetworkProgressChangedEventArgs> ProgressChanged;
>     public event EventHandler<NetworkProgressChangedEventArgs> ProgressCompleted;
>     public event EventHandler<NetworkProgressChangedEventArgs> ProgressFailed;
>
> Michael, regardless, for simple downloading I'd use WebClient; the code is much more concise:
>   

In beta 1 you couldn't do POST requests with WebClient I don't think. 
Has that changed in beta 2?

Once I have finished chapter 15 of IronPython in Action I need to go 
through all my Silverlight stuff and update it to beta 2.

Michael Foord

> from System.Net import WebClient
> from System import Uri
>
> def Downloaded(sender, args):
>     print args.Result
>
> uri = Uri('http://localhost:2060/index.html')
> req = WebClient()
> req.DownloadStringCompleted += Downloaded
> req.DownloadStringAsync(uri)
>
> Do you still have time to change your book's example? =P
>
> ~Jimmy
>
>   
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com [mailto:users-
>> bounces at lists.ironpython.com] On Behalf Of Michael Foord
>> Sent: Wednesday, May 14, 2008 2:58 PM
>> To: Discussion of IronPython
>> Subject: Re: [IronPython] Silverlight and Catching HttpWebRequest
>> Errors
>>
>> Michael Foord wrote:
>>     
>>> Michael Foord wrote:
>>>       
>>>> On May 12, 9:17 am, Jimmy Schementi <Jimmy.Scheme... at microsoft.com>
>>>> wrote:
>>>>
>>>>         
>>>>> The actual type returned by HttpWebRequest.Create() is a
>>>>> BrowserHttpWebRequest, but it's internal (not sure why). Anyway, it
>>>>> has a ProgressFailed event you can hook.
>>>>>
>>>>>           
>>>> Hello Jimmy,
>>>>
>>>> As far as I can tell it *doesn't* have the 'ProgressFailed' event.
>>>>
>>>>         
>>> The actual failure I see is:
>>>
>>> Exception: [Arg_COMException]
>>> Arguments:
>>> Debugging resource strings are unavailable. Often the key and
>>> arguments provide sufficient information to diagnose the problem. See
>>>
>>>       
>> http://go.microsoft.com/fwlink/?linkid=106663&Version=2.0.30226.1&File=
>> mscorlib.dll&Key=Arg_COMException
>>     
>>>
>>>       
>> Sorry for the noise. This one is actually for the sake of google (and
>> all who sail in her).
>>
>> Exception
>>    at MS.Internal.XcpImports.GetDownloaderBytes(IntPtr element, IntPtr&
>> outBytes, Int32& outSize)
>>    at MS.Internal.InternalWebRequest.GetResponseStream()
>>    at System.Net.BrowserHttpWebRequest.Completed(Object sender,
>> EventArgs e)
>>    at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32
>> typeIndex, Delegate handlerDelegate, Object sender, Object args)
>>    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr
>> unmanagedObjArgs, Int32 argsTypeIndex, String eventName)
>>
>> Michael
>>
>>     
>>> This is using Safari. As I'm developing on the Mac I can't use
>>> debugging, nor can I test in Firefox because of the bug in Chiron.
>>>
>>> It looks like some people have similar errors:
>>>
>>>    http://silverlight.net/forums/p/12500/40967.aspx#40967
>>>
>>> and a guy in the comments here:
>>>
>>>
>>> http://www.cameronalbert.com/post/2008/03/HttpWebRequest-Helper-for-
>>>       
>> Silverlight-2.aspx
>>     
>>> All the best,
>>>
>>> Michael Foord
>>> http://www.ironpythoninaction.com/
>>>
>>>       
>>>> I need to make cross-domain POST, and although the request gets made
>>>> successfully I'm getting a COM Arg Exception everytime (I think
>>>> because the server is slow to respond). This is screwing me at the
>>>> moment.
>>>>
>>>> FYI - when I execute the following code in Silverlight:
>>>>
>>>>   from System.Net import WebRequest
>>>>   from System import Uri
>>>>
>>>>   u = Uri('http://www.v.com')
>>>>   req = WebRequest.Create(u)
>>>>   print req.ProgressFailed
>>>>
>>>> I get the following exception:
>>>>
>>>> Traceback (most recent call last):
>>>>   File "None", line 6, in <undefined>
>>>> AttributeError: 'BrowserHttpWebRequest' object has no attribute
>>>> 'ProgressFailed'
>>>>
>>>> All the best,
>>>>
>>>> Michael Foord
>>>> http://www.ironpythoninaction.com/
>>>>
>>>>
>>>>         
>>>>> PS. If you REALLY want synchronous downloading, just hack on
>>>>> XMLHttpRequest
>>>>>
>>>>> def download(url):
>>>>>     request = HtmlPage.Window.CreateInstance("XMLHttpRequest")
>>>>>     request.Invoke("open", "GET", url, false) # false means
>>>>>           
>> synchronous
>>     
>>>>>     request.Invoke("send", "")
>>>>>     return request.GetProperty("responseText")
>>>>>
>>>>> :)
>>>>>
>>>>> ~js
>>>>> ________________________________________
>>>>> From: users-boun... at lists.ironpython.com
>>>>> [users-boun... at lists.ironpython.com] On Behalf Of Michael Foord
>>>>> [fuzzy... at voidspace.org.uk]
>>>>> Sent: Monday, May 12, 2008 12:58 AM
>>>>> To: Discussion of IronPython
>>>>> Subject: [IronPython] Silverlight and Catching HttpWebRequest
>>>>>           
>> Errors
>>     
>>>>> Hello guys,
>>>>>
>>>>> I have a problem with catching network errors raised by
>>>>>           
>> HttpWebRequest
>>     
>>>>> in Silverlight. (Not necessarily an IronPython specific question -
>>>>>           
>> but
>>     
>>>>> you guys are so intelligent you are always the first place I
>>>>>           
>> turn...)
>>     
>>>>> HttpWebRequest uses an async model for fetching resources. If there
>>>>> is a
>>>>> problem (triggered usually by a slow response from the server),
>>>>>           
>> then it
>>     
>>>>> can happen *after* I have made the request - but before my callback
>>>>>           
>> is
>>     
>>>>> invoked. This gives me nowhere to catch the exception, as
>>>>> effectively it
>>>>> happens 'inside Silverlight'. I wondered if there was a solution...
>>>>>           
>> ?
>>     
>>>>> def callback(asyncResult):
>>>>>     ...
>>>>>
>>>>> uri = Uri(some_url)
>>>>> req = HttpWebRequest.Create(uri)
>>>>>
>>>>> req.BeginGetResponse(AsyncCallback(callback), object())
>>>>>
>>>>> The error occurs after BeginGetResponse, but before calback. Any
>>>>>           
>> ideas
>>     
>>>>> for catching it?
>>>>>
>>>>> Michael Foordhttp://www.ironpythoninaction.com/
>>>>>
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>>
>>>>>           
>> Us... at lists.ironpython.comhttp://lists.ironpython.com/listinfo.cgi/user
>> s-ironpython.com
>>     
>>>>> _______________________________________________
>>>>> Users mailing list
>>>>>
>>>>>           
>> Us... at lists.ironpython.comhttp://lists.ironpython.com/listinfo.cgi/user
>> s-ironpython.com
>>     
>>>>>           
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at lists.ironpython.com
>>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>
>>>>         
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>       
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>     
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>   



More information about the Users mailing list