Domanda

Sono stato incaricato di prendersi cura di un'applicazione ASP.NET Web Form che comunica con un servizio WCF ospitati da un servizio di Windows. Il legame utilizzato per il servizio è netTcpBinding.

Il servizio espone i metodi per caricare e ‘file’ Scarica. L'utente seleziona per caricare un file e l'HttpPostFile.InputSteam è passato direttamente al servizio come parametro al servizio 'Carica' metodo. Il servizio salva il flusso come un array di byte al database [tipo di dati campo del database si varbinary (max)].

Il flusso di dati del file di download è essenzialmente il processo inverso. I byte vengono recuperati dal database; caricato in un MemoryStream nel servizio WCF; e poi restituiti all'applicazione Web.

Ho catturato i dati contenuti nei corsi d'acqua (inviati / ricevuti) ad ogni passo nelle operazioni di cui sopra - sul client (web app) e il servizio. Ho in loop attraverso e vengono scritti su un file flat i byte contenuti in ogni flusso.

La matrice di byte in ogni caso è identico [valore di byte; e il numero di byte nel flusso] Fatta eccezione per l'operazione di download dei file. Nel punto in cui il torrente viene restituito all'applicazione Web dal servizio WCF. Qui il numero di byte ricevuti è corretta ma solo i primi 255 byte sono popolate. I valori dei byte rimanenti sono nulle

Ho fatto una serie di modifiche sperimentali ai valori vincolanti - sia il cliente al servizio - come credo che il problema deve giacere qui. Fino ad oggi non ho influenzato lo stato dei byte restituiti in alcun modo. I registri per il cliente e il servizio non mostrano alcuna che le eccezioni sono gettati o altri problemi.

Non ho molta esperienza nella creazione delle giuste combinazioni di rilegatura (e altra configurazione) attributi per applicazioni client e server - dopo aver fatto affidamento su valori di default in passato. Abbiamo bisogno del servizio e cliente di essere configurati per trasferire la dimensione massima del file consentita. Purtroppo non posso usare MTOM.

Questo post e collegamenti, non hanno mi offrono una visione chiara. Finora non ho trovato altra informazione che aiuta.

Speriamo che qualcuno mi può aiutare con quello che il problema potrebbe essere. Qui di seguito sono le associazioni che sto usando:

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

servizio:

<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>
È stato utile?

Soluzione

Sciocco me. Credo di aver capito.

Gli attacchi erano OK. Non a che fare con la lettura i byte correttamente dal flusso nel buffer sul client.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top