请求参数不会在 POST 请求中传输

Posted

技术标签:

【中文标题】请求参数不会在 POST 请求中传输【英文标题】:Request parameters are not transmitted on a POST request 【发布时间】:2014-01-26 17:45:49 【问题描述】:

我通过 Fiddler 调用 WebMethod,我在“请求正文”中提供了 2 个所需的参数,但我得到了一个奇怪的行为:

前 10 个请求,它按预期工作 => 我可以在 HttpContext.Current.Request.Form 中找到参数值 从第 11 个 POST 请求开始,POST 参数不传输到WCF 服务 => 调试时WebMethodHttpContext.Current.Request.Form 为空。

知道为什么会发生这种情况吗?

这是我的代码:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/getsomething")]
[FaultContract(typeof(ResponseMessageStatus))]
[DynamicResponseType]
public Stream GetSomething()

    var par1 = HttpContext.Current.Request.Form["myparameter"] ;
    //after 10 requests, HttpContext.Current.Request.Form is empty.
    ...

【问题讨论】:

您能否添加更多详细信息,例如您的 POST 请求的屏幕截图?谢谢。 @SilverlightFox:我无法发布它,因为机密数据太多。只要它在相同的情况下工作=>数据是有效的。其他原因导致问题,可能是 WS 应用程序中的某些问题(回收或类似)。 信息是否可缓存或每次都返回新信息?您是否能够更改 c# 请求以更新计数器? (这可能不会清除数据) @Gauthier:是的,数据已经缓存在 C# 端。您的意思是发送一个新的 POST 参数(类似于时间戳)? 是的,这将是我的第一步。我不确定你是如何实现的,或者 C# 是如何实现它的合同的,所以这甚至是不可能的。 【参考方案1】:

您可能在这里有典型的 IIS 默认 10 个并发连接。 从提琴手调用 WCF 方法后,您是否能够验证连接是否关闭?可能它没有关闭,当你点击第 11 个请求时它会挂起(直到池中的任何连接都关闭),所以你看不到你的数据......

解决方案: 1.close connection(制作自己的代理测试客户端,调用后关闭代理上的连接)

var apiClient = CreateApiClient();
try

    apiClient.GetSomething();
    apiClient.Close();

catch (Exception ex)

    LogHelper.Current.WriteToLog(LogHelper.LogFiles.MessageLog, ex);
    apiClient.Abort();

2.更改配置设置:

serviceThrottling maxConcurrentCalls="10000" maxConcurrentSessions="10000" maxConcurrentInstances="10000"

【讨论】:

感谢您的回复,第 1 点不适用,因为我们正在谈论 Fiddler,而第 2 点,我已经设置了 maxconcurrentcalls = 20。我将其设置为 1000,没有结果。跨度> 【参考方案2】:

在我以 JSON 格式发送参数后修复。仍然没有得到它与 POST/JSON 一起工作的真正原因。

【讨论】:

以上是关于请求参数不会在 POST 请求中传输的主要内容,如果未能解决你的问题,请参考以下文章

android中post请求怎么传输内容

HTTP中Get与Post的区别

jmeter 请求参数中有中文,post过去后乱码

Http方法:Get请求与Post请求的区别

Http方法:Get请求与Post请求的区别

servlet初步认识