Frage

Ich habe zu Blick nach einer ASP.Net WebForms Anwendung beauftragt, dass in Verbindung steht mit einem WCF-Dienst von einem Windows-Dienst gehostet. Die verwendete Bindung für den Dienst ist netTcpBinding.

Der Dienst stellt Methoden zum Upload und Download ‚Dateien‘. Der Benutzer eine Datei auswählen und die HttpPostFile.InputSteam hochladen direkt als Parameter im Dienst ‚Hochladen‘ Methode, um den Dienst übergeben. Der Dienst speichert den Strom als Byte-Array in der Datenbank [Datenbankfeld Datentyp varbinary (max)].

Die Datei herunterladen Datenfluss ist im Wesentlichen der umgekehrte Prozess. Die Bytes werden aus der Datenbank abgerufen; geladen in einen Memory in dem WCF-Service; und dann an die Web Application zurückgegeben.

I sind die Daten eingefangen in den Strömen enthalten (gesendet / empfangen) bei jedem Schritt in den obigen Operationen - auf dem Client (Web app) und dem Service. Ich habe durchgeschleift und das Bytes in jedem Strom enthaltenen eine flache Datei geschrieben.

Der Byte-Arrays jeweils identisch [Bytewert; und die Anzahl der Bytes im Stream] Mit Ausnahme des Download-Vorgangs. An der Stelle, wo der Strom an die Web Application von dem WCF-Dienst zurückgegeben. Hier wird die Anzahl der empfangenen Bytes ist richtig, aber nur die ersten 255 Bytes aufgefüllt werden. Die Werte der übrigen Bytes sind Null

Ich habe eine Vielzahl von experimentellen Änderungen der Bindungswerte gemacht - in dem Client an Service - wie ich glaube, dass das Problem hier liegen muss. Bis heute habe ich den Status der Bytes in irgendeiner Weise zurück nicht beeinflusst. Die Protokolle für den Client und Service zeigen keine dass Ausnahmen geworfen werden oder andere Probleme.

Ich habe nicht viel Erfahrung in die richtigen Kombinationen von Bindungseinstellung (und andere Konfigurations) Attribute für Client- und Server-Anwendungen - auf Standardwerte in der Vergangenheit verlassen haben. Wir müssen den Service und Client konfiguriert werden, die maximal zulässige Dateigröße zu übertragen. Leider kann ich nicht MTOM verwenden.

Diese Post und Links, nicht bietet mir einen Einblick. Bisher habe ich keine weiteren Informationen gefunden, das hilft.

Hoffentlich kann mir jemand helfen mit, was das Problem sein könnte. Im Folgenden sind die Bindungen, ich bin mit:

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>

Service:

<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>
War es hilfreich?

Lösung

Dumme mich. Ich glaube, ich habe es.

Die Bindungen waren in Ordnung. Ich war es nicht mit auf dem Client die Bytes korrekt aus dem Strom in die Puffer zu lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top