Почему мой веб-сервис WCF завершает ответ, если выходные данные достаточно велики? - PullRequest
4 голосов
/ 16 февраля 2010

Я настроил веб-сервис WCF, который будет вызываться с моего веб-сайта. Он отлично работает, но если я запрашиваю большой объем данных (не уверен в размере, но он легко в 3-4 раза больше, чем «стандартные» данные, которые я возвращаю), Cassini (Visual Studio Web Server) просто закрывает ответ без отправки чего-либо - без ошибок или чего-либо. Ничего в журнале событий. Просто нада.

Я новичок в WCF, но я знаю, что здесь должна быть какая-то опция конфигурации (например, максимальный размер сообщения / ответа), которая решает мою проблему. Вот как выглядит мой раздел web.config:

<system.serviceModel>   
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />   
   <behaviors>
   <endpointBehaviors>
    <behavior name="securetmhAspNetAjaxBehavior">
     <enableWebScript />
    </behavior>
   </endpointBehaviors>
   <serviceBehaviors>
    <behavior name="tmhsecureBehavior">
     <serviceMetadata httpGetEnabled="false" />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <services>
   <service name="securetmh">
    <endpoint address="" behaviorConfiguration="securetmhAspNetAjaxBehavior" binding="webHttpBinding" contract="securetmh" />
   </service>
  </services>
 </system.serviceModel>

Любая помощь будет оценена.

1 Ответ

5 голосов
/ 16 февраля 2010

По соображениям безопасности WCF ограничивает данные, возвращаемые сервисным вызовом, по умолчанию до 64 К.

Вы, очевидно, можете изменить это - есть миллионы записей для настройки. Смотрите этот пример конфигурации здесь:

  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="customWebHttp"
                 maxBufferPoolSize="256000"
                 maxReceivedMessageSize="256000"
                 maxBufferSize="256000">
          <readerQuotas 
            maxArrayLength="256000"
            maxStringContentLength="256000"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="YourService">
        <endpoint name="test"
                  address="....."
                  binding="webHttpBinding"
                  bindingConfiguration="customWebHttp"
                  contract="IYourService" />
      </service>
    </services>
  </system.serviceModel>

Вам необходимо определить пользовательскую конфигурацию привязки на основе webHttpBinding, и вы можете настроить все эти различные настройки - я установил их все в 256K (вместо 64K).

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...