web-service-rest-avec-wcf-3-5. comment faire un PUT d'une Liste d'object ?
bonjour
qui pourrai m'aider à mettre à jour l'exemple ci-dessous afin de pouvoir faire un PUT d'une liste de Film
http://badger.developpez.com/tutorie...avec-wcf-3-5/#
J'ai dans l'interface ajouté une nouvelle OpérationContract
Code:
1 2 3
| [OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "putfilms", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml)]
void CreateFilms(List<Film> newFilms); |
j'ai dans la classe qui implement l'interface ajouté la méthode suivante:
Code:
1 2 3 4 5 6 7
| public void CreateFilms(List<Film> newFilms)
{
if (newFilms != null)
{
//to implement
}
} |
Je ne sais pas s'il faut modifier les Classes Film.cs et ListeFilms.cs
Coté client j'ai sérialisé une liste de film
le résultat n'est pas très jolie:
Code:
1 2 3 4 5
| "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n
<ArrayOfFilmClient xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n
<FilmClient>\r\n <Id xmlns=\"http://schemas.developpez.com/BoxOfficeREST/2008/03\">0</Id>\r\n <Titre xmlns=\"http://schemas.developpez.com/BoxOfficeREST/2008/03\">Test1</Titre>\r\n <Annee xmlns=\"http://schemas.developpez.com/BoxOfficeREST/2008/03\">2010</Annee>\r\n <Entrees xmlns=\"http://schemas.developpez.com/BoxOfficeREST/2008/03\">10.2</Entrees>\r\n </FilmClient>\r\n
<FilmClient>\r\n <Id xmlns=\"http://schemas.developpez.com/BoxOfficeREST/2008/03\">0</Id>\r\n <Titre xmlns=\"http://schemas.developpez.com/BoxOfficeREST/2008/03\">Test2</Titre>\r\n <Annee xmlns=\"http://schemas.developpez.com/BoxOfficeREST/2008/03\">1990</Annee>\r\n <Entrees xmlns=\"http://schemas.developpez.com/BoxOfficeREST/2008/03\">20.3</Entrees>\r\n </FilmClient>\r\n
</ArrayOfFilmClient>" |
et voici ma fonction qui envoi mes films coté client:
Code:
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
| private void bt_Push_several_films_Click(object sender, EventArgs e)
{
List<FilmClient> films = new List<FilmClient>();
//création de la requete
HttpWebRequest requete = WebRequest.Create(UrlWebService + "/putfilms") as HttpWebRequest;
requete.Method = WebRequestMethods.Http.Post;
requete.ContentType = "text/xml";
//le film à ajouter
FilmClient film1 = new FilmClient
{
Annee = int.Parse(tb_annee1.Text),
Entrees = double.Parse(tb_entree1.Text),
Titre = tb_titre1.Text
};
//le film à ajouter
FilmClient film2 = new FilmClient
{
Annee = int.Parse(tb_annee2.Text),
Entrees = double.Parse(tb_entree2.Text),
Titre = tb_titre2.Text
};
films.Add(film1);
films.Add(film2);
// Ecriture des données de la requête
Stream requeteStream = requete.GetRequestStream();
//sérialisation du film
System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(typeof(List<FilmClient>));
writer.Serialize(requeteStream, films);
requeteStream.Close();
//affichage du XML envoyé dans une richTextBox
StringBuilder stb = new StringBuilder();
using (StringWriter sw = new StringWriter(stb))
{
writer.Serialize(sw, films);
}
rtb_films.Text = stb.ToString();
try
{
using (HttpWebResponse reponse = requete.GetResponse() as HttpWebResponse) //on récupère la réponse du serveur
{
//on récupère valeur du champ d'entête HTTP "Location" envoyée par le service
String location = reponse.Headers["location"];
this.txtHttpLocation.Text = location;
}
}
catch (WebException we)
{
if (we.Status == WebExceptionStatus.ProtocolError)
{
HttpWebResponse r = (HttpWebResponse)we.Response;
MessageBox.Show("Code d'erreur: " + r.StatusCode.ToString());
r.Close();
}
else
MessageBox.Show(we.Message + " " + we.Status.ToString());
}
catch (Exception ex)
{
MessageBox.Show("Erreur", ex.Message);
}
} |
J'ai un "bad request" lorsque j'execute ma nouvelle fonction
si quelqu'un peut m'aider à pousser ma liste de film ça serait sympa
merci d'avance