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 :

Pb de chemin d'accès sur IIS [MVVM]


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut Pb de chemin d'accès sur IIS
    Bonjour à tous,

    Là, je suis collé !! (une fois de plus ... diront certains).

    Je m'explique :

    J'ai un site silverlight qui va uploader des images dans un dossier du site web.

    Sur mon poste en dev, tout ce passe bien.

    Par contre, lorsque je tente depuis le serveur de production, j'ai une erreur "la clé donnée était absente du dictionnaire" au moment du Upload.

    J'utilise un handler dans lequel je place l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (System.IO.FileStream fileStream = new FileStream(context.Server.MapPath("~/Illustrations/") + imageName, FileMode.Create))
    Il semble que ce soit cette dernière qui plante car lors je tente de coder le chemin "en dur", j'ai la même erreur (curieux, d'ailleurs, non ??).

    Lorsque je pointe directement sur le handler (adresse web), j'ai une erreur "Impossible de trouver une partie du chemin d'accès 'C:\OragNet\SiteWeb\Illustrations\'". Or, le chemin est le bon.

    J'ai pensé a un problème de droits mais lorsque je navigue vers la page des illustrations, je peux visualiser mes illustrations sans soucis.

    Merci d'avance!
    Frédéric

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Tu utilises un composant spécial pour l'upload ?
    La page aspx ou tu as ton composant SL est bien la même que sur ton Pc de Dev ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut
    Bonjour GuruMeditation !

    Je réalise mon upload via une procédure dans mon ViewModel dont voici la teneur :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
                private void CreateIllustration()
                  {
                      OpenFileDialog openFIleDialog = new OpenFileDialog();
                      //openFIleDialog.Filter = "All Image Files ( JPEG,GIF,BMP,PNG)|*.jpg;*.jpeg;*.gif;*.bmp;*.png|JPEG Files ( *.jpg;*.jpeg )|*.jpg;*.jpeg|GIF Files ( *.gif )|*.gif|BMP Files ( *.bmp )|*.bmp|PNG Files ( *.png )|*.png";
                      openFIleDialog.Filter = "Fichiers JPEG ( *.jpg;*.jpeg )|*.jpg;*.jpeg";
                      openFIleDialog.FilterIndex = 1;
                      openFIleDialog.Multiselect = false;
                      IllustResultatBwUpload = "";
     
                      if (openFIleDialog.ShowDialog() == true)
                      {
                          if (IllustBwUpload.IsBusy != true)
                          {
                              //IllustBusyUpload = true;
                              Messenger.Default.Send<string>("Busy", "GetBusy");
                              IllustBwUpload.RunWorkerAsync(openFIleDialog.Files); // traitement en arrière plan afin de permettre au BusyIndicator d'oeuvrer
                          }
                      }
                  }
     
                  MemoryStream GetFileData(Stream oFileStream)
                  {
                      oFileStream.Seek(0, SeekOrigin.Begin);
                      byte[] data = new byte[oFileStream.Length];
                      oFileStream.Read(data, 0, (int)oFileStream.Length);
                      return new MemoryStream(data);
                  }
     
                  private void bw_DoWork(object sender, DoWorkEventArgs e)
                  {
                      BackgroundWorker worker = sender as BackgroundWorker;
     
                      IEnumerable<FileInfo> Files = (IEnumerable<FileInfo>)e.Argument;
     
                      foreach (var file in Files)
                      {
                          string str = string.Empty;
     
                          Stream fileStream = file.OpenRead();
                          using (fileStream)
                          {
                              // sequence resizing
                              DecodedJpeg origJpeg = new JpegDecoder(fileStream).Decode();
     
                              if (ImageResizer.ResizeNeeded(origJpeg.Image, 1024))
                              {
                                  //resize de l'image
                                  DecodedJpeg resizedJpeg = new DecodedJpeg(new ImageResizer(origJpeg.Image).Resize(1024, ResamplingFilters.NearestNeighbor), origJpeg.MetaHeaders);
                                  //Encodage de resized image                
                                  MemoryStream resizedStream = new MemoryStream();
                                  new JpegEncoder(resizedJpeg, 100, resizedStream).Encode();
                                  //Read resized stream to byte array
                                  resizedStream.Seek(0, SeekOrigin.Begin);
                                  StreamResourceInfo streamResourceFile = new StreamResourceInfo(resizedStream, null);
                                  byte[] data = new byte[streamResourceFile.Stream.Length];
                                  resizedStream.Read(data, 0, Convert.ToInt32(streamResourceFile.Stream.Length));
                                  streamResourceFile.Stream.Read(data, 0, (int)streamResourceFile.Stream.Length);
                                  str = Convert.ToBase64String(data);
                              }
                              else
                              {
                                  //Read original stream to byte array                
                                  fileStream.Seek(0, SeekOrigin.Begin);
                                  StreamResourceInfo streamResourceFile = new StreamResourceInfo(fileStream, null);
                                  byte[] data = new byte[streamResourceFile.Stream.Length];
                                  fileStream.Read(data, 0, Convert.ToInt32(fileStream.Length));
                                  streamResourceFile.Stream.Read(data, 0, (int)streamResourceFile.Stream.Length);
                                  str = Convert.ToBase64String(data);
                              }
                              WebClient oWebClient = new WebClient();
                              IllustFileName = Guid.NewGuid().ToString().Replace("-", "") + file.Extension;
     
    // CA PLANTE JUSTE EN DESSOUS lorsque je me mélange les crayons sur le configurationManager.AppSettings (A ne pas confondre avec le même du site web. Ici, il s'agit d'une classe que j'ai récupéré sur le net et que je présente plus loin) 
                              oWebClient.UploadStringAsync(new Uri(ConfigurationManager.AppSettings["UrlSitePath"]+"Uploader.ashx?file=" + IllustFileName), null, str, IllustFileName);
                              str = string.Empty;
                          }
                      }
                  }
     
                  private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
                  {
                      //this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%");
                  }
     
                  private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
                  {
                      Messenger.Default.Send<string>("NotBusy", "GetBusy");
     
                      if ((e.Cancelled == true))
                      {
                          IllustResultatBwUpload = "Transfert annulé !";
                      }
     
                      else if (!(e.Error == null))
                      {
                          IllustResultatBwUpload = ("Erreur lors du transfert: " + e.Error.Message);
                      }
     
                      else
                      {
                          IllustResultatBwUpload = "Le transfert a été réalisé avec succès !";
                          CreateIllustrationInDb();
                      }
                  }

    Comme évoqué plus haut, j'utilise une classe pour simuler un configurationManager (pas bien sur de l'utilité d'ailleurs ... ).

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Collections.Generic;
    using System.Reflection;
    using System.Windows.Resources;
    using System.IO;
    using System.Xml.Linq;
     
    namespace OragNet.Common
    {
        public class ConfigurationManager
        {
             static ConfigurationManager()         
             {             
                 AppSettings = new Dictionary<string, string>();             
                 ReadSettings();         
             }           
     
            public static Dictionary<string, string> AppSettings { get; set; }           
            private static void ReadSettings()         
            {                         
                // Get the name of the executing assemby - we are going to be looking in the root folder for             
                // a file called app.config             
                string assemblyName = Assembly.GetExecutingAssembly().FullName;             
                assemblyName  = assemblyName.Substring(0, assemblyName .IndexOf(','));             
                string url = String.Format("{0};component/app.config", assemblyName);               
                StreamResourceInfo configFile = Application.GetResourceStream(new Uri(url, UriKind.Relative));               
                if (configFile != null && configFile.Stream != null)             
                {                 
                    Stream stream = configFile.Stream;                 
                    XDocument document = XDocument.Load(stream);                   
                    foreach (XElement element in document.Descendants("appSettings").DescendantNodes())                 
                    {                     AppSettings.Add(element.Attribute("key").Value, element.Attribute("value").Value);                 
                    }             
                }         
            }
        }
    }
    Cette dernière va chercher des infos dans un fichier "app.config" dont voici la teneur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    	<appSettings>
    		<add key="UrlSitePath" value="http://adresseDeMonSIteWeb:80/" />
    	</appSettings>
    </configuration>
    Pour finir, voici comment se présente le handler :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.IO;
    using System.Configuration;
     
    namespace OragNet.Web
    {
        /// <summary>
        /// Description résumée de Uploader
        /// </summary>
        public class Uploader : IHttpHandler
        {
     
            public void ProcessRequest(HttpContext context)
            {
                var imageName = context.Request["file"];
     
                string str;
     
                using (StreamReader streamReader = new StreamReader(context.Request.InputStream))
                {
     
                    str = streamReader.ReadToEnd();
     
                    byte[] array = Convert.FromBase64String(str);
     
                    using (System.IO.FileStream fileStream = new FileStream(context.Server.MapPath("~/Illustrations/") + imageName, FileMode.Create))
                    {
     
                        fileStream.Write(array, 0, array.Length);
     
                    }
     
                }
            }
     
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    Désolé pour tout ce code mais j'ai pas trop le choix si vous voulez comprendre comment ça fonctionne ...

  4. #4
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut
    Citation Envoyé par SIC83 Voir le message
    Bonjour à tous,

    Là, je suis collé !! (une fois de plus ... diront certains).

    Je m'explique :

    J'ai un site silverlight qui va uploader des images dans un dossier du site web.

    Sur mon poste en dev, tout ce passe bien.

    Par contre, lorsque je tente depuis le serveur de production, j'ai une erreur "la clé donnée était absente du dictionnaire" au moment du Upload.

    J'utilise un handler dans lequel je place l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (System.IO.FileStream fileStream = new FileStream(context.Server.MapPath("~/Illustrations/") + imageName, FileMode.Create))
    Il semble que ce soit cette dernière qui plante car lors je tente de coder le chemin "en dur", j'ai la même erreur (curieux, d'ailleurs, non ??).

    Lorsque je pointe directement sur le handler (adresse web), j'ai une erreur "Impossible de trouver une partie du chemin d'accès 'C:\OragNet\SiteWeb\Illustrations\'". Or, le chemin est le bon.

    J'ai pensé a un problème de droits mais lorsque je navigue vers la page des illustrations, je peux visualiser mes illustrations sans soucis.

    Merci d'avance!
    Frédéric

    J'ai résolu mon soucis. J'ai remplacé (context.Server.MapPath("~/Illustrations/") par mon chemin "en dur" comme ceci ("c:\\InetPub\\monSite\\Illustrations\\") et ça fonctionne bien. J'ai donc placé cette variable dans le web.config (tout de même ... ).

  5. #5
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut
    Celà dit, je ne comprends pas pourquoi ça fonctionne sur mon poste et pas sur le serveur ... !

    Si quelqu'un a la réponse, ,je suis preneur.

    Bonne journée à tous !
    Frédéric

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

Discussions similaires

  1. Rendre variable un chemin d'accès sur réseau
    Par cott333 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/05/2013, 13h50
  2. chemin d'accès à des contenus sur une clé USB
    Par djedje37et28 dans le forum Windows XP
    Réponses: 4
    Dernier message: 12/05/2010, 17h14
  3. Réponses: 1
    Dernier message: 05/03/2008, 17h52
  4. [DW8] Chemin d'accés conservés sur les liens
    Par fafaroma dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 05/03/2007, 16h06
  5. [servlet] Action suite à accès sur chemin variable ?
    Par joseph_p dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/03/2006, 09h34

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