Передача 10-40 МБ данных в WCF - PullRequest
1 голос
/ 25 февраля 2011

Я использую Безопасность сообщений и тип учетных данных Windows.Я не использую потоковую передачу и Mtom по какой-то причине прямо сейчас, но мог бы рассмотреть в будущем.До сих пор в сервисной документации WCF указано, что вы можете передавать максимум до 2 ГБ данных.Я думаю, что если я смогу передать 20-40 МБ данных в соответствии со спецификацией WCF, это будет работать для меня сейчас, хотя сейчас это плохо.

Я могу передавать данные до 10 МБ из службы WCF в клиентно когда я пытаюсь увеличить размер более 10 МБ, что-то останавливает передачу данных с сервера на клиент, и я не знаю, что.
Я передаю коллекцию объектов из веб-службы в клиент.Когда данные не передаются с сервера на клиент, я не получаю сообщений об ошибках, это очень странно.Когда я устанавливаю размеры переноса ниже 10 МБ в свойствах привязки клиента и сервера, я могу передавать коллекцию из 1650 объектов, но когда это около 1900, я ничего не получаю на клиенте ????ПОЧЕМУ ????

Просто чтобы заставить его работать, я установил для свойства require все max, и он все еще не работает.Ниже приведено то, что у меня есть в клиенте:

<ws2007HttpBinding>
      <binding name="CustomizeWs2007HttpBinding" sendTimeout="00:10:00" closeTimeout="00:10:00"
          openTimeout="00:10:00" messageEncoding="Text" receiveTimeout="00:10:00"
          maxBufferPoolSize="0"
          maxReceivedMessageSize="2147483647"
          >
          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"
                         maxBytesPerRead="4096" />
          <security mode="Message">
             <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true"/>
          </security>
      </binding></ws2007HttpBinding>

Ниже приведено то, что у меня есть в службе WCF (сервер):

<ws2007HttpBinding>
      <binding name="KerberosBinding" maxBufferPoolSize="0" maxReceivedMessageSize="2147483647"
               messageEncoding="Text" sendTimeout="00:10:00" closeTimeout="00:10:00"
          openTimeout="00:10:00">
        <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"
                         maxBytesPerRead="4096" />
        <security>
          <message negotiateServiceCredential="true" establishSecurityContext="true"/>
        </security>
      </binding></ws2007HttpBinding>

Я надеюсь, что у кого-то есть ответ.Заранее большое спасибо.

Спасибо, Крис, сейчас все работает, и спасибо всем за ответ.Я являюсь новым участником этого сайта, поэтому не знаю, где разместить свое окончательное решение, в любом случае оно вставлено ниже:

15728640 = 15 МБ
10485760 = 10 МБ, хотя его размер слишком велик

Конфигурация клиента:

<behaviors>
  <endpointBehaviors>
    <behavior name="PServiceBehavior">
      <dataContractSerializer maxItemsInObjectGraph="10485760"/>
    </behavior>
  </endpointBehaviors>
</behaviors>

и ссылка на него с конечной точки:

<endpoint address="http://localhost:53054/pservicehost/pservice.svc"

binding = "ws2007HttpBinding" bindingConfiguration = "PServiceWs2007HttpBinding" поведениеConfiguration = "PServiceBehavior" contract = "PWebServiceContract.IPService" name = "PServiceWs2007HttpBindingEndPoint">

* * * 10 * 10 * 10 * и 10 * 10 * ссылкаэто из сервиса:
<services>
   <service behaviorConfiguration="PServiceHost.PServiceBehavior"  name="PWebService.PService">
  <endpoint address="" binding="ws2007HttpBinding" bindingConfiguration="KerberosBinding" contract="PWebServiceContract.IPService">
  <identity>
      <dns value="localhost" />
  </identity>
  </endpoint>
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
   </services>

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Возможно, это как-то связано с настройкой газа:

<dataContractSerializer maxItemsInObjectGraph="..."/>
1 голос
/ 25 февраля 2011

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

Вот ссылка, которая объясняет, как включить его: Средство просмотра служебных трассировок (SvcTraceViewer.exe)

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