簡體   English   中英

C#WebResponse流丟失字節?

[英]C# WebResponse Stream losing bytes?

所以我有一個像這樣的功能:

private String SendRequest(String jsonRequest)
    {
        WebRequest webRequest = WebRequest.Create(_url);
        byte[] paramBytes = Encoding.UTF8.GetBytes(jsonRequest);
        byte[] responseBytes;

        webRequest.Method = "POST";
        webRequest.ContentType = "application/json";
        webRequest.ContentLength = paramBytes.Length;
        webRequest.Headers.Add("X-Transmission-Session-Id", _sessionId);


        using (Stream oStream = webRequest.GetRequestStream())
        {
            oStream.Write(paramBytes, 0, paramBytes.Length);
        }

        WebResponse webResponse = webRequest.GetResponse();

        using (Stream iStream = webResponse.GetResponseStream())
        {
            responseBytes = new byte[webResponse.ContentLength];
            iStream.Read(responseBytes, 0, (int) webResponse.ContentLength);
        }

        return Encoding.UTF8.GetString(responseBytes);
    }

問題是,在iStream.Read()階段,某些字節丟失了。 使用wireshark顯示所有字節都已發送到該計算機,但是.Net在途中將它們丟失了。 例如,在我當前的調試會話中,其中webResponse.ContentLength = 4746 byte [3949]至byte [4745]均為0,但應填充它們。 結果,UTF8 JSON字符串會提前中斷,因此我無法反序列化JSON。

我以為代碼很清楚,我看不到丟失那些字節在哪里出了問題。

謝謝你的幫助!

我通過使用StreamReader來解決它:)

private String SendRequest(String jsonRequest)
    {
        WebRequest webRequest = WebRequest.Create(_url);
        byte[] paramBytes = Encoding.UTF8.GetBytes(jsonRequest);
        String jsonResponse;

        webRequest.Method = "POST";
        webRequest.ContentType = "application/json";
        webRequest.ContentLength = paramBytes.Length;
        webRequest.Headers.Add("X-Transmission-Session-Id", _sessionId);


        using (Stream oStream = webRequest.GetRequestStream())
        {
            oStream.Write(paramBytes, 0, paramBytes.Length);
            oStream.Close();
        }

        WebResponse webResponse = webRequest.GetResponse();

        using (Stream iStream = webResponse.GetResponseStream())
        {
            StreamReader reader = new StreamReader(iStream, Encoding.UTF8);
            jsonResponse = reader.ReadToEnd();
            reader.Close();
            iStream.Close();
        }

        return jsonResponse;
    }

從流中讀取時,可以獲得的字節數少於請求的字節數。

http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx

讀入緩沖區的字節總數。 如果當前尚無可用字節,則該數目可以小於請求的字節數;如果已到達流的末尾,則該數目可以小於零(0)。

WebResponse.GetResponseStream() msdn示例: http : //msdn.microsoft.com/zh-cn/library/system.net.webresponse.getresponsestream.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM