Асинхронный модуль WCF HTTP является значением по умолчанию в .NET 4.0 для AppPool, использующего режим интегрированного конвейера.
Если вы посмотрите на обработчики по умолчанию (в \ Windows \ System32 \ inetsrv \ config \ applicationHost.config), вы найдете 3 зарегистрированных обработчика для * .svc:
<add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
Обратите внимание на атрибут preCondition для каждого: первые два запускаются в классическом режиме, а последний (упомянутый в сообщении блога WenLong) предназначен для интегрированного режима.
Чтобы включить это, вам просто нужно убедиться, что AppPool, в котором работает ваша служба WCF, имеет:
- .NET Framework Версия: .NET 4.0
- Управляемый конвейерный режим: интегрированный
Это не повлияет на прокси вашего клиента; это влияет только на способ взаимодействия IIS и WCF при длительных вызовах. Возможно, вы захотите взглянуть на некоторые сообщения в блоге AsyncPage / AsyncController (MVC2 / 3), чтобы лучше это понять.
Для настройки количества потоков для обслуживания долго выполняющихся запросов вы обычно используете раздел processModel (в machine.config). Отличная статья о процессе настройки:
http://blogs.msdn.com/b/endpoint/archive/2011/05/04/wcf-scales-up-slowly-with-bursts-of-work.aspx