You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure V4 Isolated函数请求体为NullStream异常排查求助

问题描述

原本运行正常的Azure V4 Isolated函数近期突然抛出请求体为NullStream的异常,相关代码如下:

函数代码

[Function("SomeFunc")]
public Task<MultiResponse> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestData req)
{
  // req.body == nullstream.  Should contain serialsed content
}

生成的directFunctionExecutor代码片段

context.GetInvocationResult().Value = await i.Run((global::Microsoft.Azure.Functions.Worker.Http.HttpRequestData)inputArguments[0])

传入的参数类型为GppcHttpRequestData,但其body属性被设置为NullStream。

调用端代码

StringContent content = new StringContent(SerializeObject(a01.ToString()), System.Text.Encoding.UTF8, "application/xml");
HttpRequestMessage rm = new HttpRequestMessage(HttpMethod.Post, new Uri(url));
rm.Content = content;
rm.Version = HttpVersion.Version10;

using (var httpResponseMessage = await client.SendAsync(rm, HttpCompletionOption.ResponseContentRead))
{
 ...
}

其中A01是经ToBase64String()序列化后的字符串内容。

可能的原因排查
  • HTTP版本兼容性问题:调用端设置了HttpVersion.Version10,Azure Functions Isolated Worker对HTTP/1.0请求的处理存在特殊逻辑。如果请求头的Content-Length未正确设置或被篡改,Worker无法识别请求体,会导致body为NullStream。
  • 请求体内容为空:调用端中SerializeObject(a01.ToString())可能生成了空内容,或者a01.ToString()本身输出为空。检查a01的序列化结果是否有效,确认StringContent生成的字节流非空。
  • Runtime版本更新引发兼容问题:近期Azure Functions Runtime若有版本更新,Isolated Worker的请求处理逻辑可能发生变化,导致GppcHttpRequestData解析请求体异常。尝试回退到之前稳定的Runtime版本验证。
  • 请求体被提前耗尽:调用端或中间代理(如API网关、APIM)提前读取了请求体流但未重置位置,会导致函数端接收到的流处于已耗尽状态,表现为NullStream。排查中间环节是否修改或读取了请求体。
  • Content-Type不匹配:调用端设置Content-Type为application/xml,但实际发送的是Base64编码字符串,格式不匹配可能导致Worker无法正确解析请求体,进而视为空流。确认Content-Type与实际内容格式一致(比如Base64内容可设置为text/plain)。

内容的提问来源于stack exchange,提问作者AndyW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:12:40