Клиент WCF - только первые 255 байтов потока, возвращенного службой WCF, содержат значения

Мне было поручено присматривать за приложением ASP.Net WebForms, которое связывается со службой WCF, размещенной службой Windows. Для службы используется привязка netTcpBinding.

Сервис предоставляет методы для загрузки и скачивания "файлов". Пользователь выбирает для загрузки файла, и HttpPostFile.InputSteam передается непосредственно в службу в качестве параметра в методе "Загрузка" службы. Служба сохраняет поток в виде байтового массива в базе данных [тип данных поля базы данных - varbinary (max)].

Поток данных загрузки файла по сути является обратным процессом. Байты извлекаются из базы данных; загружается в MemoryStream в службе WCF; а затем вернулся в веб-приложение.

Я собрал данные, содержащиеся в потоках (отправленные / полученные) на каждом этапе вышеуказанных операций - на клиенте (веб-приложение) и службе. Я перебрал и записал в плоский файл байты, содержащиеся в каждом потоке.

Массив байтов в каждом случае идентичен [значение байта; и количество байтов в потоке] за исключением операции загрузки файла. В тот момент, когда поток возвращается в веб-приложение из службы WCF. Здесь количество принятых байтов является правильным, но заполняются только первые 255 байтов. Значения оставшихся байтов равны нулю

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

У меня нет большого опыта в настройке правильных комбинаций атрибутов привязки (и других настроек) для клиентских и серверных приложений, поскольку в прошлом использовались значения по умолчанию. Нам необходимо настроить службу и клиент для передачи максимально допустимого размера файла. К сожалению, я не могу использовать MTOM.

Этот пост и ссылки, не предлагали мне никакого понимания. До сих пор я не нашел другой информации, которая помогает.

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

Клиент [web.config]:

  <bindings>  
         <netTcpBinding>
            <binding name="TCP"  
                       closeTimeout="00:01:00" 
                       openTimeout="00:10:00"
                       receiveTimeout="00:01:00" sendTimeout="00:01:00" 
                       transferMode="Streamed" 
                       maxBufferPoolSize="512"
                       maxBufferSize="2147483647" 
                       maxConnections="10" 
                       maxReceivedMessageSize="2147483647">     

               <readerQuotas maxDepth="32" 
                             maxStringContentLength="2147483647" 
                             maxArrayLength="2147483647"
                             maxBytesPerRead="4096" 
                             maxNameTableCharCount="2147483647" />
               <reliableSession ordered="true" inactivityTimeout="00:10:00"
                 enabled="false" />
               <security mode="Transport">
                  <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                  <message clientCredentialType="Windows" />
               </security>
            </binding>
         </netTcpBinding>

Обслуживание:

<netTcpBinding>
        <binding name="netTCP"
                 closeTimeout="00:01:00"
                 openTimeout="00:01:00"
                 receiveTimeout="00:01:00" sendTimeout="00:01:00"
                 transferMode="Streamed"
                 listenBacklog="30"
                 maxBufferPoolSize="512"
                 maxBufferSize="2147483647"
                 maxConnections="30"
                 maxReceivedMessageSize="2147483647"
                 portSharingEnabled="true">
          <readerQuotas maxDepth="32"
                        maxStringContentLength="2147483647"
                        maxArrayLength="2147483647"
                        maxBytesPerRead="4096"
                        maxNameTableCharCount="2147483647" />
        </binding>
      </netTcpBinding>

1 ответ

Решение

Дурак я. Я думаю, что получил это.

Привязки были в порядке. Я не имел дело с чтением байтов правильно из потока в буфер на клиенте.

Другие вопросы по тегам