Клиент WCF - только первые 255 байтов потока, возвращаемых из службы WCF, содержат значения
-
02-10-2019 - |
Вопрос
Мне было поручено посмотреть после приложения 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>
Решение
Дурак я. Я думаю, что у меня это есть.
Привязки были в порядке. Я не имел дело с чтением байтов правильно из потока в буфер на клиенте.