IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Silverlight 3 WCF upload fichier


Sujet :

Silverlight

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut Silverlight 3 WCF upload fichier
    Bonjour,

    Je développe une application Silverlight 3 qui doit faire un upload de fichier vers un serveur, pour cela j'utilise un WCF.

    Dans l'application Silverlight :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public void ExecuteParcourirBoutonCommand()
    {
          OpenFileDialog openFileDialog = new OpenFileDialog();
          openFileDialog.Filter = "Image files (*.xls;*.xlsx)|*.xls;*.xlsx";
          openFileDialog.Multiselect = false;
          bool? resultDialog = openFileDialog.ShowDialog();
          if (resultDialog == true)
          {
               byte[] bytes;
               using (Stream str = openFileDialog.File.OpenRead())
               {
                    bytes = new Byte[str.Length];
                    str.Read(bytes, 0, bytes.Length);
                }
                CreateUploadFile(openFileDialog.File.Name, bytes);
                PublipostageFile = openFileDialog.File.Name;
           }
    }
     
    private void CreateUploadFile(string fileName, byte[] buffer)
    {
          Service1Client client = new Service1Client();
          client.UploadFileCompleted += new EventHandler<AsyncCompletedEventArgs>(UploadFile);
          client.UploadFileAsync(fileName, buffer);
    }
     
    void UploadFile(object sender, AsyncCompletedEventArgs e)
    {
    }
    Et voici le code du WCF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public void UploadFile(string fileName, byte[] input)
     {
          new LogCall(delegate
          {
               string Path = "XXXXX";
               using (FileStream fs = File.Create(string.Format("{0}{1}", Path, fileName)))
               {
                   fs.Write(input, 0, input.Length);
                }
           });
    }
    Et le web.config du WCF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <system.serviceModel>
         <bindings>
              <basicHttpBinding>  
                    <binding name="Binding1" maxBufferSize="334217728" maxBufferPoolSize="52428800" maxReceivedMessageSize="334217728" transferMode="Streamed">
                        <readerQuotas maxArrayLength="100000000" maxStringContentLength="100000000"/>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <services>
                <service name="Appli.WCFService.Service1" behaviorConfiguration="Appli.WCFService.Service1Behavior">
                    <endpoint address="" binding="basicHttpBinding" contract="DataPrintBox.WCFService.IService1">
                        <identity>
                            <dns value="localhost" />
     
                        </identity>
                    </endpoint>
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                </service>
            </services>
            <behaviors>
                <serviceBehaviors>
     
                    <behavior name="Appli.WCFService.Service1Behavior">
                        <!-- Pour éviter la divulgation des informations sur les métadonnées, définissez la valeur ci-dessous sur false et supprimez le point de terminaison des métadonnées ci-dessus avant le déploiement -->
                        <serviceMetadata httpGetEnabled="true" />
                        <serviceCredentials>
                            <clientCertificate>
                                <authentication mapClientCertificateToWindowsAccount="true" />
                            </clientCertificate>
                        </serviceCredentials>
     
                        <!-- Pour recevoir les détails d'exception des erreurs à des fins de débogage, définissez la valeur ci-dessous sur true.  Définissez-la sur false avant le déploiement pour éviter la divulgation des informations d'exception -->
                        <serviceDebug includeExceptionDetailInFaults="false" />
                    </behavior>
               </serviceBehaviors>
         </behaviors>
    </system.serviceModel>
    Ce code marche très bien pour l'envoi de fichiers de petites tailles mais pour un fichier de 28Ko ça ne marche plus.
    Il me fait une exception
    Le serveur distant a retourné une erreur : NotFound.
    (Pas d'éxception dans les log du WCF).
    Manifestement c'est un problème de taille mais j'ai réglé le web.config pour envoyer des fichiers de grandes tailles.
    Quelqu'un a une idée ?

    Merci

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    Coté Serveur, as-tu accès au source ? L'enregistrement s'effectue t'il correctement (Debug) ?

    Tu peux essayer d'en savoir plus sur ton erreur en regardant avec Fiddler le contenu des trames qui contiennent généralement le message de l'exception.

    http://www.fiddler2.com/fiddler2/

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    Merci pour ton aide.

    Oui, j'ai accès au source coté serveur. En fait quand le fichier est trop grand, il ne rentre même pas dans la méthode du WCF UploadFile(string fileName, byte[] input) sur le serveur (j'ai vérifié avec un système de log).

    Voici le message d'erreur remonté par Fiddler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:DeserializationFailed</faultcode><faultstring xml:lang="en-US">The formatter threw an exception while trying to deserialize the message: Error in deserializing body of request message for operation 'UploadFile'. The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 37898.</faultstring></s:Fault></s:Body></s:Envelope>

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Peut être que ce forum pourra t'aider (regarde en bas) :

    http://social.msdn.microsoft.com/for...-803a68de92d9/

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    Oui, c'est exactement ça, j'avais oublié de paramétrer mon endPoint dans le web.config du WCF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <endpoint bindingConfiguration="Binding1" address="" binding="basicHttpBinding" contract="Appli.WCFService.IService1">
           <identity>
    		<dns value="localhost" />
    	</identity>
    </endpoint>
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. WCF Upload fichier vers webservice
    Par bibeuz dans le forum Services Web
    Réponses: 1
    Dernier message: 17/07/2013, 15h25
  2. SilverLight et WCF, transfert de fichier volumineux
    Par Nalfeim dans le forum Silverlight
    Réponses: 5
    Dernier message: 26/08/2008, 17h31
  3. Réponses: 3
    Dernier message: 02/09/2004, 11h26
  4. [servlet]Upload Fichier su serveur
    Par mathk dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 21/04/2004, 10h24
  5. [Struts][Oracle]Upload fichier word dans une base
    Par Maximil ian dans le forum Struts 1
    Réponses: 7
    Dernier message: 10/02/2004, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo