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

Мне было поручено присмотреть за приложением 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 Ответ

0 голосов
/ 12 сентября 2010

Глупый я. Я думаю, что у меня есть.

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

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