开发者

Moonlight, WebClient and "Exception has been thrown by the target of an invocation"

I'm writing a little engine to download text from some .php files, I've done this engine in Visual c# and I haven't got problems.

I'm doing this:

        [ ... ]
        WebClient client = null;

        try {
            client = new WebClient();
            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler( CompleteDownload );
            client.AllowReadStreamBuffering = true;
            client.DownloadStringAsync( new Uri( "http://blabla/bla.php" ) );
        }
        catch (Exception e) {
            lbl1.Text = e.Message;
        } 
        [ ... ]

And this to "catch" the downloaded data:

public void CompleteDownloadPcops( object sender, DownloadStringCompletedEventArgs ea ) {
    if ( ea.Error == null ) {
        try{
            lbl1.Text = ea.Result;
        }
        catch(Exception e) {
            lbl2.Text = e.Message;
        }
    }
}

Executing this code I get, on lbl1 the exception Exception has been thrown by the target of an invocation, result of lbl1.Text = ea.Result; in CompleteDownload. Why? And, after knowing the reason, how I can solve it?

More info: I'm using moonlight in monodevelop 2.4 on Ubuntu 11.04 platform.

UPDATE

I've update my system to MonoDevelop 2.6 as you recomended me. Now, doing the same, I've get an error on ea.Error. The message is (in spanish):

System.Security.SecurityException ---> System.Security.SecurityException: Error de seguridad. en System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) en System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) en System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState) --- Fin del seguimiento de la pila de excepciones internas --- en System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) en System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) en System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result) en System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result).

The full code I'm using now is:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        WebClient client = null;
        try
        {
            client = new WebClient();
            client.DownloadStringCompleted += new System.Net.DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
            client.AllowReadStreamBuffering = true;
            client.DownloadStringAsync(new Uri("http://carles.lambdafunction.com/a/try.php"));
        }
        catch (Exception ex)
        {
            lbl1.Text = ex.Message;
            btn1.Content = "A";
        }
    }

    void client_DownloadStringCompleted(object sender, System.Net.DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            try
            {
                lbl2.Text = e.Result;
            }
            catch (Exception ex)
            {
                lbl1.Text = ex.Message;
                lbl2.Text = ex.InnerException.ToString();
                btn1.Content = "C";
            }
        }开发者_运维技巧
        else
        {
            lbl1.Text = e.Error.ToString();
            btn1.Content = "B";
            txt1.Text = e.Error.ToString();
        }
    }
}

You can see the output of the web call (to the dummy page /p/try.php), it's really simple. Really, now, I'm lost because I'm following this tutorial: http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-3-using-networking-to-retrieve-data-and-populate-a-datagrid.aspx .


Where is your .xap located ?

If you're trying to read data from a different web site (address / port) then be sure to read "Network Security Access Restrictions in Silverlight" and provide a policy file that allow the application to access your web server.

E.g. both the following URL returns 404 (which means there's no policy to allow Silverlight or Moonlight applications to access the server)

  • http://carles.lambdafunction.com/clientaccesspolicy.xml
  • http://carles.lambdafunction.com/crossdomain.xml
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜