По-прежнему не удается передавать большие объемы данных через WCF - что еще не так? - PullRequest
0 голосов
/ 22 января 2012

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

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

Вот нижняя часть 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?

Буду признателен за любую помощь в этом.

Спасибо.

Ответы [ 4 ]

1 голос
/ 22 января 2012

Сообщение об ошибке гласит:

... Подробнее смотрите в журналах сервера.

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

1 голос
/ 22 января 2012

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

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

0 голосов
/ 01 февраля 2012

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

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

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

0 голосов
/ 22 января 2012

Не можете ли вы использовать привязку "Потоковое" WCF?

WCF & Streaming

...