Pregunta

Me han encargado de cuidar de una aplicación ASP.NET Web Forms que se comunica con un servicio WCF alojados por un servicio de Windows. La unión se utiliza para el servicio es netTcpBinding.

El servicio expone métodos para cargar y archivos ‘’ de descarga. El usuario puede seleccionar para cargar un archivo y el HttpPostFile.InputSteam se pasa directamente al servicio como un parámetro en el método 'Subir' servicio. El servicio ahorra la corriente como una matriz de bytes a la base de datos [tipo de datos de campo de base de datos se varbinary (max)].

El flujo de datos de descarga de archivos es esencialmente el proceso inverso. Los bytes se recuperan de la base de datos; cargado en un MemoryStream en el servicio WCF; y luego regresó a la aplicación web.

Me han capturado los datos contenidos en las corrientes (envío / recepción) en cada paso en las operaciones anteriores - en el cliente (aplicación web) y el servicio. He bucle a través y por escrito a un archivo plano los bytes contenidos en cada secuencia.

La matriz de bytes en cada caso es idéntico valor de byte [; y el número de bytes de la corriente] A excepción de la operación de descarga de archivos. En el punto donde la corriente se devuelve a la aplicación Web desde el servicio WCF. Aquí el número de bytes recibidos es correcta, pero sólo los primeros 255 bytes son pobladas. Los valores de los bytes restantes son cero

Me han hecho una serie de cambios experimentales en los valores de unión - tanto en el cliente en el servicio - como creo que el problema debe estar aquí. Hasta la fecha no he influido en la situación de los bytes devueltos en cualquier forma. Los registros para el cliente y el servicio no muestran ninguna excepción que se tiran o cualquier otro problema.

No tengo mucha experiencia en el establecimiento de las combinaciones correctas de unión (y otras configuraciones) atribuye para aplicaciones de cliente y servidor - haber confiado en los valores predeterminados en el pasado. Necesitamos el servicio y el cliente para ser configurados para transferir el tamaño máximo de archivo permitido. Por desgracia no puedo usar la masa máxima de despegue.

Este post y los enlaces, no lo hicieron ofrecerme alguna idea. Hasta el momento no he encontrado ninguna otra información que ayuda.

Con suerte alguien me puede ayudar con lo que podría ser el problema. A continuación se presentan los enlaces que estoy usando:

Cliente [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>

servicio:

<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>
¿Fue útil?

Solución

Me tonto. Creo que he conseguido.

Las encuadernaciones estaban bien. Yo no estaba tratando con la lectura de los bytes de la corriente correctamente en el búfer en el cliente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top