2015-06-23 85 views
1

我有問題類似this one。 該應用必須通過wlan與相機進行通信。Stream.ReadAsync不適用於Windows Phone 8.1

在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-Call將引發NotSupportedException。

有什麼想法?

來自德國 拉爾夫

+1

問候是有不同之處的消息? (另外,如果你遵循.NET的命名約定,使用'camelCase'作爲局部變量,它會讓你的代碼更容易閱讀。) –

+0

那麼我面臨的問題與你已經引用的帖子中提到的相同。我們從system.net.http更改爲windows.web.http,它工作。所以肯定有一些問題與system.net.http值得調查。在Windows運行時使用時,我們發現system.net的HTTPClient不是非常有用。 – saurav

回答

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 Store應用程序中使用相關的Windows.Web.Http.Headers和Windows.Web.Http.Filters命名空間。

查看here瞭解詳情。

看來,httpclient的8.1手機實現不是很好。

對windows.net.http的更改徹底解決了我的問題 - 再次感謝@saurav。來自德國 拉爾夫

相關問題