[IronPython] Silverlight and Catching HttpWebRequest Errors

Jimmy Schementi Jimmy.Schementi at microsoft.com
Thu Jun 26 20:01:06 CEST 2008



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.

~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




More information about the Ironpython-users mailing list