none
請問StreamSocket和HttpClient RRS feed

  • 問題

  • 問題是StreamSocket和HttpClient可同時使用嗎?

    我程式先用StreamSocket接收server傳過來的網址,然後再用HttpClient從網址上接收stream,

    當執行到httpclient.GetStreamAsync(uri)這一段就跳離vs2012的Debug模式,就不執行了,

    有試過不經過StreamSocket接收server傳值(直接mark掉),直接給網址(httpclient.GetStreamAsync(uri)),

    是可執行的,請問有遇過這樣的問題嗎?

    2013年4月1日 下午 12:44

解答

  • 很不賴的程式, 主要的問題出在把 Stream 轉成 IRandomAccessStream 那一段有問題, 就是 ShowImage 那個方法,

     async void ShowImage(string uri)
            {
                var streamHttpClient = await GetUriStreamOfPictureByHttpClient(new Uri(uri, UriKind.Absolute));
    
                var streamHttpWebRequest = await GetUriStreamOfPictureByHttpWebRequest(new Uri(uri, UriKind.Absolute));
                MemoryStream ms = new MemoryStream();
                streamHttpClient.CopyTo(ms);
                BitmapImage bi = new BitmapImage();
                IRandomAccessStream ras = await ConvertToRandomAccessStream(ms);
                bi.SetSource(ras );
                image1.Source = bi;            
            }
    
            public static async Task<IRandomAccessStream> ConvertToRandomAccessStream(MemoryStream memoryStream)
            {
                var randomAccessStream = new InMemoryRandomAccessStream();
                var outputStream = randomAccessStream.GetOutputStreamAt(0);
                var dw = new DataWriter(outputStream);
                var task = Task.Factory.StartNew(() => dw.WriteBytes(memoryStream.ToArray()));
                await task;
                await dw.StoreAsync();
                await outputStream.FlushAsync();
                return randomAccessStream;
            }



    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 andylin5 2013年4月8日 上午 02:34
    2013年4月3日 上午 05:58
    版主

所有回覆

  • Server 端是你自己寫的嗎 ? 還是現成的 Service ?

    相關程式碼 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年4月1日 下午 06:28
    版主
  • server是我自己寫的。

    程式碼


    2013年4月3日 上午 03:33
  • 很不賴的程式, 主要的問題出在把 Stream 轉成 IRandomAccessStream 那一段有問題, 就是 ShowImage 那個方法,

     async void ShowImage(string uri)
            {
                var streamHttpClient = await GetUriStreamOfPictureByHttpClient(new Uri(uri, UriKind.Absolute));
    
                var streamHttpWebRequest = await GetUriStreamOfPictureByHttpWebRequest(new Uri(uri, UriKind.Absolute));
                MemoryStream ms = new MemoryStream();
                streamHttpClient.CopyTo(ms);
                BitmapImage bi = new BitmapImage();
                IRandomAccessStream ras = await ConvertToRandomAccessStream(ms);
                bi.SetSource(ras );
                image1.Source = bi;            
            }
    
            public static async Task<IRandomAccessStream> ConvertToRandomAccessStream(MemoryStream memoryStream)
            {
                var randomAccessStream = new InMemoryRandomAccessStream();
                var outputStream = randomAccessStream.GetOutputStreamAt(0);
                var dw = new DataWriter(outputStream);
                var task = Task.Factory.StartNew(() => dw.WriteBytes(memoryStream.ToArray()));
                await task;
                await dw.StoreAsync();
                await outputStream.FlushAsync();
                return randomAccessStream;
            }



    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 andylin5 2013年4月8日 上午 02:34
    2013年4月3日 上午 05:58
    版主
  • 我執行過後,它還是在 return await client.GetStreamAsync(uri); 這段跳離debug模式。

    它還沒執行到Stream 轉成 IRandomAccessStream 那一段。

    2013年4月5日 上午 02:29
  • 怪了, 我執行很正常, 它不就是 Console 那個程式會擷取畫面然後送到 Windows Store App  這邊來嗎 ?

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年4月5日 上午 04:10
    版主
  • 是的,您執行正常..,有可能是我作業系統環境問題,重灌VS2012看看好了,謝謝您。
    2013年4月8日 上午 02:34
  • 先別忙重灌, 我想起一件事, 我的執行方式是 (1) 在 本機執行你的 Server 專案 (2) App 部分則是執行在模擬器上.

    你先這樣試試


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年4月8日 上午 03:15
    版主