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