Question WCF .Net 4 erreur Not found sur requete "POST"

  • mercredi 26 janvier 2011 10:17
     
      A du code

    Bonjour,

     

    J'ai développé un petit service REST qui me permet d'envoyer des emails avec une piece jointe.

    Lorsque j'attaque mon service, j'ai perpetuellement une réponse "Not Found" de sa part, alors que ma requete semble bien formatée.

    Avez vous une idée de la raison, et comment diagnostiquer le problème?

     

    Code du service:

     

    [WebInvoke(UriTemplate = "", Method = "POST", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
    
    public bool envoyer(Email mail)
    
    {
    
     try
    
     {
    
      File.AppendAllText("d:\\logREST.txt", "Service appelé\n");
    
      string fileName = "d:\\" + DateTime.Now.Ticks.ToString() + ".wma";
    
      Stream stream = File.Create(fileName);
    
      stream.Write(mail.Buffer, 0, mail.Buffer.Length);
    
      stream.Flush();
    
      stream.Close();
    
      File.AppendAllText("d:\\logREST.txt", "fichier créé\n");
    
      SmtpClient client = new SmtpClient("smtp.free.fr");
    
      MailMessage message = new MailMessage(mail.From, mail.To);
    
      message.Subject = mail.Subject;
    
      message.IsBodyHtml = true;
    
      message.Body = mail.Body;
    
      message.Attachments.Add(new Attachment(fileName));
    
      client.Send(message);
    
      File.AppendAllText("d:\\logREST.txt", "email envoyé\n");
    
      return true;
    
     }
    
     catch (Exception e)
    
     {
    
      File.AppendAllText("d:\\logREST.txt", e.Message);
    
      return false;
    
     }
    
    }
    
    
     public class Email
    
     {
    
      string deviceId;
    
    
    
      public string DeviceId
    
      {
    
       get { return deviceId; }
    
       set { deviceId = value; }
    
      }
    
      string from;
    
    
    
      public string From
    
      {
    
       get { return from; }
    
       set { from = value; }
    
      }
    
      string to;
    
    
    
      public string To
    
      {
    
       get { return to; }
    
       set { to = value; }
    
      }
    
      string subject;
    
    
    
      public string Subject
    
      {
    
       get { return subject; }
    
       set { subject = value; }
    
      }
    
      string body;
    
    
    
      public string Body
    
      {
    
       get { return body; }
    
       set { body = value; }
    
      }
    
    
    
      byte[] buffer;
    
    
    
      public byte[] Buffer
    
      {
    
       get { return buffer; }
    
       set { buffer = value; }
    
      }
    
    
    
     }
    
    

     

    et voici mon code du coté client (sur Windows Phone 7):

    private void WriteCallback(IAsyncResult asynchronousResult)
    
    {
    
     HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    
     IsolatedStorageFileStream s = store.OpenFile(enregistrementSelectionne.Fichier, System.IO.FileMode.Open, System.IO.FileAccess.Read);
    
     byte[] bufferEnvoi = new byte[s.Length];
    
     s.Read(bufferEnvoi, 0, bufferEnvoi.Length);
    
     s.Close();
    
     Email mailAEnvoyer = new Email();
    
     mailAEnvoyer.From = "varenne.o@free.fr";
    
     mailAEnvoyer.To = "warenbe@hotmail.com";
    
     mailAEnvoyer.Subject = "Test sujet";
    
     mailAEnvoyer.Body = "Test body";
    
     mailAEnvoyer.DeviceId = "no device Id";
    
     mailAEnvoyer.Buffer = bufferEnvoi;
    
     DataContractSerializer obj = new DataContractSerializer(typeof(Email));
    
     MemoryStream st = new MemoryStream();
    
     obj.WriteObject(st, mailAEnvoyer);
    
     byte[] buf = new byte[st.Length];
    
     st.Seek(0, SeekOrigin.Begin);
    
     st.Read(buf, 0, buf.Length);
    
     st.Close();
    
    
    
     Stream postStream = request.EndGetRequestStream(asynchronousResult);
    
     postStream.Write(buf, 0, buf.Length);
    
     postStream.Close();
    
     request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);
    
    }
    
    
    
    
    
    
    
    private void ResponseCallback(IAsyncResult asynchronousResult)
    
     {
    
     HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    
     HttpWebResponse resp = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
    
     Stream streamResponse = resp.GetResponseStream();
    
     StreamReader streamRead = new StreamReader(streamResponse);
    
     string responseString = streamRead.ReadToEnd();
    
     streamResponse.Close();
    
     streamRead.Close();
    
     resp.Close();
    
    }
    
    

     

     

    ça c'est le premier truc.

     

    le second, sur mon pc du boulot si j'héberge le service sur IIS tout va bien, sur mon pc chez moi, impossible de l'heberger sur IIS: j'ai à chaque fois une erreur 404... la seule différence réside dans le fait que chez moi je suis sur seven 64b, alors qu'au boulot, seven 32b.

     

    Merci d'avance


    j'ai faim!
    • Modifié warenbe mercredi 26 janvier 2011 10:17 (erreur typo)
    •  

Toutes les réponses

  • mercredi 26 janvier 2011 21:52
    Modérateur
     
     

    Bonjour,

    Pouvez-vous nous indiquer plus précisement l'exception que vous obtenez ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5