По умолчанию последняя версия WCF фактически устанавливает значения по умолчанию, а json используется по умолчанию. Что было неясно, так это то, какой тип привязки по умолчанию использовал WCF. Оказывается, это webHttpBinding. В Интернете вы также увидите множество примеров, демонстрирующих атрибуты, применяемые к методу сервиса, например, [WebGet]. Метод не требует никаких атрибутов вообще. Чтобы maxStringContentLength вступил в силу, вам нужно правильно настроить привязку и поведение. Вот правильные записи в файле web.config:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="DevServiceBehavior" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="DeveloperService" behaviorConfiguration="DevServiceBehavior" >
<endpoint address="" binding="webHttpBinding" contract="DeveloperService" bindingConfiguration="webHttpBindingDev" behaviorConfiguration="jsonBehavior">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingDev">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</webHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>