流被重置:PROTOCOL_ERROR

时间:2018-03-15 10:31:16

标签: model-view-controller http-post

我已经编写了一个Web API,用于在服务器和我正在处理的应用程序之间发送和接收数据。

它适用于所有事情,但我现在发现它不会让我发送大字符串。字符串是base64字符串,代表图像,通常大小约为100kb。

我正在尝试的方法是一个多部分帖子,将base64字符串分成可以成功发送的块。

当我使用这种方法时,我收到一个错误:

  

流已重置:PROTOCOL_ERROR

检查数据库后,似乎第一个字符串块成功发送,但之后不再发生。

任何人都可以了解导致这种情况发生的原因吗?

相关代码在这里:

首先是将图像分解为可管理的块并将其发布的过程:

HTTPRequest req = new HTTPRequest();

IEnumerable<string> imgStrSplit = Split(img1byteArrayStr, 1000);

                    foreach (string s in imgStrSplit)
                    {
                        response = await req.SubmitImage("Test", s, "1");
                    }

以下是HTTPRequest类的SubmitImage()方法:

public async Task<int> SubmitImage(string name, string imageString, string imgNum)
        {

            using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(new NativeMessageHandler()))
            {
                client.DefaultRequestHeaders.Add("Accept", "application/json");

                int successResponse;

                string address = $"https://myURL/SubmitImage?name=" + name + "&imageStr=" + imageString + "&imgNum=" + imgNum + "&curl=AYZYBAYZE143";

                HttpResponseMessage response = await client.GetAsync(address);

                successResponse = JsonConvert.DeserializeObject<int>(response.Content.ReadAsStringAsync().Result);

                return successResponse;

            }

感谢。

1 个答案:

答案 0 :(得分:0)

通过this discussion找到解决方案。

问题在于我正在使用ModernHTTPClint NuGet包,如SubmitImage方法的这一行所示:

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(new NativeMessageHandler()))

据说NativeMessageHandler()使连接工作更快,但在某些情况下显然会导致我遇到的PROTOCOL_ERROR。通过删除此部分,我解决了问题。