0

在silverlight中如果要跨域访问,则需要在被访问网站的根目录下添加策略文件crossdomain.xml。内容如下(可以更细致配置,可以查阅相关资料):

 

  1. <?xml version="1.0"?>  
  2. <!-- http://localhost/crossdomain.xml -->  
  3. <cross-domain-policy>  
  4.     <allow-access-from domain="*" />  
  5. </cross-domain-policy>  

 

在silverlight中使用webclient来获取网页内容,这里我简单封装了一个类。

需要using System.Net;

 

 

  1. public class SuperWebRequest  
  2. {  
  3.     public SuperWebRequest(string url, Delegate onComplete)  
  4.     {  
  5.         requestURL = url;  
  6.   
  7.         webClientOnCompet = onComplete;  
  8.         webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);  
  9.         Random rand = new Random();  
  10.   
  11.         bool add_flag = false;  
  12.         for (int i = 0; i < url.Length; i++)  
  13.         {  
  14.             if (url[i] == '?')  
  15.             {  
  16.                 add_flag = true;  
  17.                 break;  
  18.             }  
  19.         }  
  20.         Uri endpoint;  
  21.         if (add_flag)  
  22.             endpoint = new Uri(url + "&rand=" + rand.Next());  
  23.         else  
  24.             endpoint = new Uri(url + "?rand=" + rand.Next());//添加随机数防止缓存   
  25.         webClient.DownloadStringAsync(endpoint);  
  26.     }  
  27.   
  28.     private void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)  
  29.     {  
  30.         if (!e.Cancelled && e.Error == null)  
  31.         {  
  32.             //回调   
  33.             Super.objMainPage.Dispatcher.BeginInvoke(webClientOnCompet, e.Result.ToString());  
  34.         }  
  35.         else  
  36.         {  
  37.             MessageBox.Show("web通信异常" + e.Error.Message.ToString());  
  38.         }  
  39.     }  
  40.   
  41.     private WebClient webClient = new WebClient();  
  42.     private Delegate webClientOnCompet;  
  43.   
  44.     private string requestURL;  
  45. }  

 

使用方法:

 

定义带模板委托

    public delegate void DelegateSingleParam<T>(T t);

 

调用

                SuperWebRequest myWebRequest = new SuperWebRequest(
                    Config.WebRoot+"lastvolumn.xml", new DelegateSingleParam<string>(OnLoadLastVolumn));

 

回调: data即网页代码

        private void OnLoadLastVolumn(string data)
        {
            
        }

关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.