locked
WebRequest 不能正常获取数据流问题? RRS feed

  • 常规讨论

  • 我有两个url分别是:

     

    http://ilogo.imobile.com.cn/detail.php?a=download&from=api&logo_id=1062782

    http://ilogo.imobile.com.cn/detail.php?a=download&from=api&logo_id=1062784

    两个url均能用IE访问,且下面代码在WPF中也能正常运行。但在wp7中,其中第一个在 WebResponse response = webrequest.EndGetResponse(ar); 会报 ArgumentException 异常,而第二个则能正常访问,怎么才能获取第一个url的流啊?

    代码如下:

     

      Uri url = new Uri("http://ilogo.imobile.com.cn/detail.php?a=download&from=api&logo_id=1062782", UriKind.Absolute);
    
      HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
      request.BeginGetResponse((ar) =>
      {
      HttpWebRequest webrequest = ar.AsyncState as HttpWebRequest;
      WebResponse response = webrequest.EndGetResponse(ar);
      MemoryStream mem = new MemoryStream();
      using (Stream stream = response.GetResponseStream())
      {
       byte[] buf = new byte[1024];
       int len = 0;
       while ((len = stream.Read(buf, 0, 1024)) > 0)
       {
       mem.Write(buf, 0, len);
       }
      }
      response.Close();
      }, request);
    
    

     

     



    2011年6月9日 4:04

全部回复

  • 你好

    這可能是Server 設定的問題 E.G. 沒有設定好可以 使服务跨域边界可用

    如果可以的話... 請在SERVER 上加入clientaccesspolicy.xml 和 crossdomain.xml

    詳情可以參考以下URL

    http://msdn.microsoft.com/zh-cn/library/cc197955(v=vs.95).aspx

    Please correct me if my concept is wrong


    Chi
    2011年6月9日 20:23
  • wp7也有服务跨域边界问题吗?我更改不了服务器。另外,如果是这个问题,那么那两个网址应该都访问不了才对啊。怎么有一个能访问,一个不能?难到wp7对这个地址就没有办法了吗?
    2011年6月10日 1:26
  • 你好

    是的wp7也有服务跨域边界问题.. 因為他是用SILVERLIGHT 的

    我嘗試過使用這2個URL 2個都不能訪問... 不知道為什麼...

    不好意思..我也不知道怎樣可以解決服务跨域边界问题.. 或者你可以EMAIL 他們問問他們可不可以加入這2個FILES.

     

    Please correct me if my concept is wrong

     


    Chi
    2011年6月10日 5:05
  • 我将那两个服务跨域边界的两个文件放到服务器上还是不行。例如下面网址:
    http://ilogo.dahai1.com/detail.php?a=download&from=api&logo_id=1062390
    该网址是一张图片,用WebRequest去获取其数据流则会报 ArgumentException 异常,但是用:
    new BitmapImage(new Uri("http://ilogo.dahai1.com/detail.php?a=download&from=api&logo_id=1062390"));
    则可以正则显示这张图片。
    在一个界面上放上两个 Image控件,第一个用 Image.Source直接赋值的方式设置,第二个用WebRequest获取数据流构造成BitmapImage方式。会发现,在一开始,第一个能正常显示,而第二个则会获取数据流失败。这时退出多运行3-4次这个界面的代码。则第二个image也能正常显示该图片。如果将app删除,重新运行代码,则第二个image又不能正常显示图片了。这是为什么呢?
    我用抓包工具在ie上分别访问这几个地址,http头也没发现什么不同。
    还有如果链接是:http://ilogo.imobile.com.cn/detail.php?a=download&from=api&logo_id=1062784 则肯定能获取数据流的。
    跨域配置xml:
    http://ilogo.dahai1.com/crossdomain.xml
    http://ilogo.dahai1.com/clientaccesspolicy.xml
    • 已编辑 ssiori 2011年11月9日 14:32
    2011年6月10日 8:54
  • 论坛不支持附件吗?

    测试代码:http://dl.dbank.com/c0v6t8j2bs


    2011年6月13日 1:23
  • 你好

    對呀..這論壇暫時還是不支持附件的

    我看了你的Sample..在我的電腦上執行能看到2張圖片...看來你的程式碼是沒有問題的... 

    Please correct me if I mis-understood your questions


    Chi
    2011年6月14日 3:56
  • 代码在我本地则不能正常显示,通过不断的build运行工程,偶尔就可以了,之后在运行代码则不在抛出那个异常,可以正常显示。

    free image hostingfree image hosting

    注释掉代码运行程序,则图片依然可以正常显示。

    free image hostingfree image hosting

    这时如果删除掉程序,或者Rebuild工程,在次运行,则又不能正常显示了。

    free image hostingfree image hosting


    2011年6月14日 8:14
  • 我在wpf上通过测试代码,然后抓包,发现用 Image.Source 访问会在Http头上加UserAgent,而用WebRequest则不会。所以我在Wp7上也加入UserAgent,发现图片竟然可以显示了,去掉则会抛异常。
    还有一点。如果加上UA运行程序,图片正常显示,这时回到代码去掉UA后,图片依然能正常显示,只有在更改代码后Rebuile或者删除模拟器中的程序,重新运行才能使更改的代码生效。

    为什么同样两个链接,其中一个必须设置UA才能正常访问,而另一个则不用呢?是BUG吗?

    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0; InfoPath.2; Zune 4.7; 4399Box.778; 4399Box.778)";

    2011年6月16日 8:15
  • 强人


    努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!
    2011年7月11日 6:52
    版主