[IronPython] Silverlight and Catching HttpWebRequest Errors
Michael Foord
fuzzyman at voidspace.org.uk
Thu Jun 26 22:21:04 CEST 2008
Jimmy Schementi wrote:
> Michael Foord wrote:
>
>> 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
>>
>
> Yep, POST is now supported by WebClient. For cross-domain post, you must have something like <allow-from http-request-headers="*"><domain uri="*" /></allow-from> in the clientaccesspolicy.xml file on the server.
>
Thanks.
Michael
> ~js
>
>
>>> 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
>>>
>>>
>> _______________________________________________
>> 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
>
--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/
http://www.trypython.org/
http://www.ironpython.info/
http://www.theotherdelia.co.uk/
http://www.resolverhacks.net/
More information about the Ironpython-users
mailing list