Stream.ReadAsync不适用于Windows Phone 8.1

时间:2015-06-23 15:24:27

标签: c# windows-phone-8

我的问题类似于this。 该应用程序必须通过wlan与相机通信。

在Windows 8.1上,应用程序运行正常 - 一切正常。 在Windows Phone 8.1上,我成功调用了ReadAsync(...)NotSupportedException。

我以这种方式打开流:

 public async Task<Stream> OpenHttpURLConnectionAsync(string url)
 {
   WebRequest request = WebRequest.Create(new Uri(url));
   var r = (WebResponse)await request.GetResponseAsync();
   if (r != null)
   {
     try
     {
       return r.GetResponseStream();
     }
     catch (InvalidOperationException ex)
     {
       Debug.WriteLine(ex.Message);
       return null;
     }
   }
   throw new Exception("Cannot connect to service");
}

在此功能中使用此流:

public async Task<byte[]> ReadBytesAsync(Stream stream, int length)
{
  if (stream != null)
  {
    byte[] Puffer = new byte[length];
    int Position = 0;
    int BlockSize = 128;
    int Rest = length;
    while ((Position < length))
    {
      if (Rest < BlockSize)
        BlockSize = Rest;
      int ReadCount  = await s.ReadAsync(Puffer, Position, BlockSize, System.Threading.CancellationToken.None);
      Position += ReadCount;
      Rest -= ReadCount;
    }
    return Puffer;
  }
  return null;
}

在商店应用中,流类型为System.Net.Stream, 在手机应用程序中,类型为System.Net.ConnectStream。

我尝试了不同的块大小,但这不会改变行为:作为商店应用程序一切正常,因为手机应用程序无法正常工作: 第一个ReadAsync读取8个字节并且可以工作。 第二个ReadAsync读取128个字节并且也可以工作。 然后,应用程序必须读取一些“massdata”(jpeg),并且在1316字节之后,ReadAsync调用将抛出NotSupportedException。

有什么想法吗?

来自德国的问候 拉尔夫

1 个答案:

答案 0 :(得分:0)

感谢@saurav:是的,System.net.http就是问题所在:

  

System.Net.Http和System.Net.Http.Headers命名空间可能在Windows的未来版本中不可用,以供Windows应用商店应用使用。从Windows 8.1和Windows Server 2012 R2开始,使用Windows.Web.Http命名空间中的Windows.Web.Http.HttpClient和相关的Windows.Web.Http.Headers和Windows.Web.Http.Filters命名空间代替Windows应用商店应用

查看here了解详情。

看来,httpclient的8.1手机实现效果不是很好。

对windows.net.http的更改完全解决了我的问题 - 再次感谢@saurav。

来自德国的问候 拉尔夫