Salut,
J'ai cr�� un simple controller MVC nomm� "ProgrammesController" contenant une m�thode Get() me permettant de r�cup�rer un datatable (qui fonctionne bien).
Pour y acc�der je tape directement dans mon explorateur : "http://MonServeur/Updator_Service/api/Programmes/" (cela fonctionne)
j'ai ensuite cr�� une m�thode Get(string id) permettant de renvoyer un datatable ne contenant que les donn�es concern�es par cet "id".
Pour y acc�der : "http://MonServeur/Updator_Service/api/Programmes/truc" o� "truc" est l'id � envoyer pour filtrer le datatable. (dans l'explorateur cela fonctionne)
voici le code de ce controller :
Donc, dans l'explorateur les deux fonctionnent, j'ai ensuite cr�� (sous android/xamarin) deux bouts de code pour r�cup�rer les donn�es de ce service web.
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 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using System.Web; using System.Data; namespace Updator.Controllers { public class ProgrammesController : ApiController { public System.Data.DataTable Get(string id) { DataTable dt_Programmes = null; DataTable dt_Logiciels = null; Outils_BDD.Objets.Connexion_BDD_Collection mesConnexions = null; Commun.logue("Tentative de récupération des programmes pour la tablette '" + id + "'", "ProgrammesController.RecupProgrammes", "Updator", null); try { mesConnexions = new Outils_BDD.Objets.Connexion_BDD_Collection(HttpContext.Current.Server.MapPath(@"~/Parametres/Connexions.xml"), true); } catch (Exception ex) { Commun.logue("Erreur lors de la connexion à la base 'Applications'", "ProgrammesController.RecupProgrammes", "Updator", ex); return null; } try { dt_Programmes = new DataTable("Programmes"); string requete = "SELECT * FROM Recup_Android_Programmes_Tablettes_V ORDER BY NumSerie, Nom"; Outils_BDD.Utiles.RecupCharge_Table(dt_Programmes, requete, HttpContext.Current.Server.MapPath(@"~/Parametres/Programmes.xml"), mesConnexions["Applications"], true, false); DataRow[] drs_Programmes = dt_Programmes.Select("NumSerie = '" + id + "'"); dt_Logiciels = dt_Programmes.Clone(); foreach (DataRow dr_Programme in drs_Programmes) { dt_Logiciels.ImportRow(dr_Programme); } } catch (Exception ex) { Commun.logue("Erreur lors de la récupération des Programmes", "ProgrammesController.Get", "Updator", ex); return null; } return dt_Logiciels; } public System.Data.DataTable Get() { DataTable dt_Programmes = null; Outils_BDD.Objets.Connexion_BDD_Collection mesConnexions = null; Commun.logue("Tentative de récupération des programmes", "ProgrammesController.Get", "Updator", null); try { mesConnexions = new Outils_BDD.Objets.Connexion_BDD_Collection(HttpContext.Current.Server.MapPath(@"~/Parametres/Connexions.xml"), true); } catch (Exception ex) { Commun.logue("Erreur lors de la connexion à la base 'Applications'", "ProgrammesController.Get", "Updator", ex); return null; } try { dt_Programmes = new DataTable("Programmes"); string requete = "SELECT * FROM Recup_Android_Programmes_Tablettes_V ORDER BY NumSerie, Nom"; Outils_BDD.Utiles.RecupCharge_Table(dt_Programmes, requete, HttpContext.Current.Server.MapPath(@"~/Parametres/Programmes.xml"), mesConnexions["Applications"], true, false); } catch (Exception ex) { Commun.logue("Erreur lors de la récupération des Programmes", "ProgrammesController.Get", "Updator", ex); return null; } return dt_Programmes; } } }
Le premier n'ayant qu'� interroger le service web :
appel� comme ceci : Outils_Android_Reseau.Service_Web.Recup_DataTable_ServiceWeb("http://MonServeur/Updator_Service/api/Programmes");
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 public static DataTable Recup_DataTable_ServiceWeb(string URL_ServiceWeb) { DataTable retour = null; System.IO.Stream maIS; try { HttpURLConnection urlConnection = null; URL url; url = new URL(URL_ServiceWeb); urlConnection = (HttpURLConnection)url.OpenConnection(); urlConnection.SetRequestProperty("Content-Type", "application/xml"); urlConnection.Connect(); maIS = urlConnection.InputStream; retour = new DataTable(); retour.ReadXml(maIS); } catch (Exception ex) { throw new Exception("Erreur avec le service web '" + URL_ServiceWeb + "' : " + ex.Message); } return retour; }
Ce code fonctionne parfaitement, je r�cup�re bien mon dataset au complet dans mon programme Android.
Le deuxi�me par contre me pose probl�me; Voici le bout de code :
pour l'ex�cuter : Outils_Android_Reseau.Service_Web.Recup_DataTable_ServiceWeb(_numSerie, "http://MonServeur/Updator_Service/api/Programmes");
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 public static DataTable Recup_DataTable_ServiceWeb(string filtre, string URL_ServiceWeb) { DataTable retour = null; HttpURLConnection urlConnection = null; try//Envoi Post { URL url = new URL(URL_ServiceWeb); urlConnection = (HttpURLConnection)url.OpenConnection(); urlConnection.RequestMethod = "POST"; urlConnection.SetRequestProperty("Content-Type", "application/xml"); //urlConnection.SetRequestProperty("Content-Type", "text/xml; charset=utf-8"); urlConnection.DoInput = true; urlConnection.DoOutput = true; Stream os = urlConnection.OutputStream; PrintWriter pw = new PrintWriter(os); pw.Print(filtre); pw.Close(); } catch (Exception ex) { throw new Exception("Erreur Lors de l'envoi : " + ex.Message); } try//Reception reponse { HttpStatus status = urlConnection.ResponseCode; if (status != HttpStatus.Ok) { retour = null; } else { retour = new DataTable(); retour.ReadXml(urlConnection.InputStream); } } catch (Exception ex) { throw new Exception("Erreur Lors de la réception de la réponse : " + ex.Message); } return retour; }
Quand je l'ex�cute, "urlConnection.ResponseCode" me renvoie syst�matiquement "Java.Net.HttpStatus.BadMethod"
Je tourne en rond depuis plusieurs heures et malgr� les exemples similaires sur le web je ne trouve pas l'origine de mon probl�me
J'ai tendance � penser que le service web est correct vu que via Firefox j'obtiens bien dans les deux cas un XML repr�sentant mon datatable.
Et au vu des exemples trouv� sur le web, je ne vois pas ce que j'ai pu louper dans le code cot� Android.
Je ne suis ni un pro d'Android (Seulement 2 programmes assez simples � mon actif) ni d'ASP.Net en g�n�ral (quelques petits projets simples seulement)
Quelqu'un peut'il m'�clairer ?
Merci
Partager