Question

Je suis chargé d'occuper une application ASP.Net WebForms qui communique avec un service WCF hébergé par un service Windows. La liaison utilisée pour le service est netTcpBinding.

Le service expose des méthodes pour charger et télécharger des fichiers « ». L'utilisateur de sélectionner pour télécharger un fichier et le HttpPostFile.InputSteam est transmis directement au service en tant que paramètre dans le service de la méthode « Envoyer ». Le service enregistre le flux en tant que tableau d'octets dans la base de données [champ de base de données de type de données est varbinary (max)].

Le flux de données de téléchargement de fichiers est essentiellement le processus inverse. Les octets sont extraits de la base de données; chargé dans un MemoryStream dans le service WCF; puis renvoyé à l'application Web.

I ont capturé les données contenues dans le flux (envoyés / reçus) à chaque étape dans les opérations ci-dessus - sur le client (application web) et le service. J'ai bouclées et écrit dans un fichier plat les octets contenus dans chaque flux.

Le tableau d'octets dans chaque cas est identique valeur [octet; et le nombre d'octets dans le flux], sauf pour l'opération de téléchargement de fichier. Au point où le flux est renvoyé à l'application Web du service WCF. Ici, le nombre d'octets reçus est correct mais seulement les 255 premiers octets sont renseignés. Les valeurs des octets restants sont nuls

J'ai fait une foule de changements expérimentaux aux valeurs de liaison - dans le client au service de - car je crois que le problème doit se trouver ici. À ce jour, je ne l'ai pas influencé l'état des octets renvoyés en aucune façon. Les journaux pour le client et le service ne montrent pas que les exceptions sont jetés ou tout autre problème.

Je n'ai pas beaucoup d'expérience dans la définition des combinaisons correctes de la liaison (et autre configuration) les attributs pour les applications client et serveur - avoir fait confiance par défaut dans le passé. Nous avons besoin du service client et être configuré pour transférer la taille du fichier maximale admissible. Malheureusement, je ne peux pas utiliser MMD.

Ce poste et des liens, ne l'ont pas me donner une idée. Jusqu'à présent, j'ai trouvé aucune autre information qui aide.

Il faut espérer que quelqu'un peut me aider à ce que la question pourrait être. Voici les liaisons que j'utilise:

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>
Était-ce utile?

La solution

Me Silly. Je pense que je l'ai obtenu.

Les liaisons étaient OK. Je ne traite avec la lecture des octets correctement à partir du flux dans le tampon sur le client.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top