- РЕДАКТИРОВАТЬ -
Я вспоминаю, что этот вопрос сводил меня с ума однажды, поэтому я вернулся к другому взгляду. Конечно же ... Учитывая требование, чтобы Javscript оставался таким, как написано, я утверждаю, что это буквально невозможно в текущей версии WCF. Рассмотрим следующие моменты:
1) Вам необходимо использовать webHttpBinding, потому что это единственная привязка, которая поддерживает службы в стиле REST (basicHttpBinding и WSHttpBinding используют обертки SOAP). (ссылка здесь: BasicHttpBinding против WsHttpBinding против WebHttpBinding )
2) В вызове AJAX, как написано в этом вопросе, используется тип содержимого «application / x-www-form-urlencoded» (вы можете подтвердить это с помощью Fiddler).
3) Вы также можете подтвердить, что WCF выдает исключение еще до того, как метод сервиса будет вызван. Исключение составляют следующие:
Стиль тела 'Голый' не поддерживается 'WebScriptEnablingBehavior'. Измените стиль тела на WrappedRequest.
Но «голый» стиль тела - это язык Microsoft для REST-запроса с использованием основных параметров (т. Е. Не «обернутый» в JSON или XML). То есть, нет никакой возможной конфигурации, которая позволила бы WCF обрабатывать этот конкретный запрос AJAX. Вы даже можете реализовать свой собственный WebContentTypeMapper, и он все равно не будет работать. Этот парень к ним: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2473190-consider-making-the-system-servicemodel-channels-r
Мой вывод заключается в том, что (учитывая, что вы не можете использовать MVC, что могло бы сделать это очень просто), вам нужно каким-то образом перенаправить этот запрос на базовую страницу .ASPX и использовать надежные старые методы Webforms (Page. IsPostBack, Request.Params ["param1"] и т. Д.).
- КОНЕЦ РЕДАКТИРОВАНИЯ -
Согласно другой теме выше, похоже, что есть несколько параметров, которые необходимо добавить / исправить в вызове AJAX:
...
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(d)
...