2012-01-22 6 views
0

У меня проблема, когда я пытаюсь передать большое количество объектов из моей службы WCF. Я должен ограничить перенос объектов на 100, в противном случае возникает некоторая коммуникационная ошибка.По-прежнему не удается передать большие объемы данных через WCF - что еще не так?

Я пробовал рекомендации в решении, найденном here, но, возможно, мне что-то не хватает, поскольку я все еще получаю сообщение об ошибке.

Вот нижняя часть web.config моей службы WCF в:

<system.web> 
    <httpRuntime maxRequestLength="102400" /> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="MyWsHttpBinding" /> 
     </wsHttpBinding> 
     <netTcpBinding> 
     <binding name="myNetTcpBinding" 
       closeTimeout="00:01:00" 
       openTimeout="00:01:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:01:00" 
       transactionFlow="false" 
       transferMode="Buffered" 
       transactionProtocol="OleTransactions" 
       hostNameComparisonMode="StrongWildcard" 
       listenBacklog="10" 
       maxBufferPoolSize="2147483647" 
       maxBufferSize="524288" 
       maxConnections="10" 
       maxReceivedMessageSize="2147483647"> 
      <readerQuotas maxDepth="32" 
         maxStringContentLength="8192" 
         maxArrayLength="16384" 
         maxBytesPerRead="4096" 
         maxNameTableCharCount="16384" /> 
      <reliableSession ordered="true" 
          inactivityTimeout="00:10:00" 
          enabled="false" /> 
      <security mode="Transport"> 
      <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> 
      </security> 
     </binding> 
     </netTcpBinding> 
    </bindings> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="myNetTcpBehaviour"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior>   
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="myNetTcpEndPointBehaviour"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

Далее, вот нижняя часть web.config части веб-сайта, который потребляет веб-службы:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_IFeederService" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" 
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
      useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" maxStringContentLength="55000" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <security mode="None"> 
      <transport clientCredentialType="None" proxyCredentialType="None" 
       realm="" /> 
      <message clientCredentialType="UserName" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

    <behaviors> 
     <endpointBehaviors> 
     <behavior name="myEndPointBehavior"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 

    <client> 

     <endpoint address="http://www.mysiate.com/MyService.svc" 
     binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFeederService" 
     contract="FeederService.IFeederService" name="BasicHttpBinding_IFeederService" /> 
    </client> </system.serviceModel> 

ошибки я получаю: произошла

ошибки при получении ответа HTTP на http://www.mysite.com/MyService.svc. Это может быть связано с привязкой конечной точки , не использующей протокол HTTP. Это также может быть вызвано контекстом HTTP-запроса, который прерывается сервером (возможно, из-за к завершению работы службы). Подробнее см. Журналы сервера.

Странная вещь в том, что, когда я писал это сообщение, я повторил его с изменением логики возврата до 190 объектов, и это сработало. Повторил, и он потерпел неудачу.

Возможно, это вопрос изменения некоторых параметров IIS?

Любая помощь по этому вопросу будет оценена по достоинству.

Спасибо.

+0

Как насчет [это] (http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/ 686499d2-5e31-47ee-941B-760264472875 /)? –

+0

Это также может помочь http://stackoverflow.com/questions/1281269/response-size-limitaiton-of-a-wcf-web-serivces. Проблема может быть связана с ограничением размера конфигурации basichttpbinding. – Muthu

+0

Сколько всего вы переводите? –

ответ

1

Вы не объявляли никаких конечных точек в вашей конфигурации службы, что означает модель конечных точек ФОС по умолчанию используется

Однако вы назвали ваши обязательные конфигурации и поведения, что означает, что они не получают улавливаемый конечные точки по умолчанию. Если вы удалите имена из конфигурации привязки и поведения, то они станут настройками по умолчанию и получат конечные точки по умолчанию

1

сообщение об ошибке говорит:

... Смотрите логи сервера для более подробной информации.

Я бы начал с настройки трассировки на сервере, как описано в this MSDN article.

0

Ваша привязка должна соответствовать настройке behaviourconfiguration.

<endpoint address="http://www.mysiate.com/MyService.svc" 
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFeederService" 
    behaviorConfiguration="myEndPointBehavior" contract="FeederService.IFeederService" name="BasicHttpBinding_IFeederService" /> 
</client> </system.serviceModel> 

В противном случае граф-настройки обыкновение быть использованы