2014-01-08 2 views
5

Я взываю к WebMethod через Скрипач, я обеспечиваю 2 необходимые параметры в «теле запроса», и я получаю странное поведение:Параметры запроса не передаются на запрос POST

  • первые 10 запросов, он работает, как ожидалось => Я могу найти значения параметров в HttpContext.Current.Request.Form
  • , начиная с 11-го запроса POST, параметры POST не передаются WCF сервис => при отладке WebMethod, HttpContext.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. 
    ... 
} 
+0

Можете ли вы добавить дополнительную информацию, такую ​​как скриншот вашего запроса POST? Благодарю. – SilverlightFox

+0

@SilverlightFox: я не могу опубликовать его, поскольку слишком много конфиденциальных данных. До тех пор он работает в тех же случаях => данные валид. Что-то еще вызывает проблему, может быть, что-то в приложении WS (переработка или подобное). – user3104183

+0

Является ли информация кэшируемой или новая информация возвращается каждый раз? Можете ли вы изменить запрос C# для обновления счетчика? (это, возможно, не очистит данные) – Gauthier

ответ

0

Возможно вы здесь типичные IIS по умолчанию 10 одновременных соединений. Можете ли вы проверить, что соединение закрыто после вызова метода WCF из скрипача? Вероятно, он не закрыт, и когда вы нажмете на 11-й запрос, он зависает (пока не будет закрыто какое-либо соединение из пула), поэтому вы не видите свои данные ...

Решения: 1. закрыть соединение (сделать свой собственный прокси-клиент тест и закрыть соединение на прокси после вызова)

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" 
+0

Спасибо за ваш ответ, пункт 1. не применяется, поскольку мы говорим о Fiddler, а для пункта 2 у меня уже есть maxconcurrentcalls = 20. Я установил его 1000, никакого результата. – user3104183

0

Fixed только после того, как я послал параметры в формате JSON. Все еще не понимают, почему это работает с POST/JSON.

Смежные вопросы