【问题标题】:Request parameters are not transmitted on a POST request请求参数不会在 POST 请求中传输
【发布时间】: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# 是如何实现它的合同的,所以这甚至是不可能的。

标签: c# .net wcf post webmethod


【解决方案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 一起工作的真正原因。

【讨论】:

    猜你喜欢
    • 2016-11-05
    • 1970-01-01
    • 2013-08-09
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2016-10-17
    相关资源
    最近更新 更多