Мне было поручено следить за приложением ASP.Net WebForms, которое взаимодействует со службой WCF, размещенной в службе Windows. Для службы используется привязка netTcpBinding.
Сервис предоставляет методы для загрузки и скачивания «файлов». Пользователь выбирает загрузку файла, и HttpPostFile.InputSteam передается непосредственно службе в качестве параметра в методе службы «Загрузить». Сервис сохраняет поток в виде массива байтов в базу данных [тип данных поля базы данных — varbinary (max)].
Поток данных загрузки файлов, по сути, является обратным процессом. Байты извлекаются из базы данных; загружается в MemoryStream в службе WCF; а затем вернулся в веб-приложение.
Я зафиксировал данные, содержащиеся в потоках (отправленных/полученных) на каждом этапе вышеописанных операций — на клиенте (веб-приложение) и сервисе. Я просмотрел и записал в плоский файл байты, содержащиеся в каждом потоке.
Массив байтов в каждом случае идентичен [byte value; и количество байтов в потоке], за исключением операции загрузки файла. В момент, когда поток возвращается в веб-приложение из службы 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>
MemoryStream
? - person Ronald Wildenberg   schedule 12.09.2010