我已经编写了一个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;
}
感谢。
答案 0 :(得分:0)
通过this discussion找到解决方案。
问题在于我正在使用ModernHTTPClint NuGet包,如SubmitImage方法的这一行所示:
using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(new NativeMessageHandler()))
据说NativeMessageHandler()
使连接工作更快,但在某些情况下显然会导致我遇到的PROTOCOL_ERROR。通过删除此部分,我解决了问题。