Bonjour,
J'ai développé un service WCF avec requête REST au format JSON.
J'utilise fiddler pour tester. J'appelle le service avec le content-type: application/json. J'ai une erreur 400. Je remplace application/json par
application/x-www-form-urlencoded et cela fonctionne.
J'ai configuré comme suit
J'ai testé avec les valeurs WebMessageBodyStyle mais sans succés.
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
106
107 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text; using System.IO; namespace WcfTest { [ServiceContract] public interface ISrvWcfTest { [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "postData", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] Reponse GetDataUsingDataContract(Stream JSONdataStream); } [DataContract] public class ObjetMessage { public string login { get; set; } public string mps { get; set; } public string dateHeure { get; set; } public List<ObjetPost> data { get; set; } } //Tableau la liste d'objets éléments //public //Objets contenants les éléments [DataContract] [Serializable] public class ObjetPost { [DataMember] public string id { get; set; } [DataMember] public ObjetNature nature { get; set; } [DataMember] public ObjetSource source { get; set; } [DataMember] public ObjetDetail detail { get; set; } } [DataContract] [Serializable] public class ObjetNature { [DataMember] public string name { get; set; } [DataMember] public string type { get; set; } } [DataContract] [Serializable] public class ObjetSource { [DataMember] public string installation { get; set; } [DataMember] public string moduleUCG { get; set; } } [DataContract] [Serializable] public class ObjetDetail { [DataMember] public string date { get; set; } [DataMember] public string data { get; set; } [DataMember] public string longData { get; set; } [DataMember] public string lpAlias { get; set; } } //Objet servant à la répoonse [DataContract] public class Reponse { bool fError = false; string fmessageInformation = ""; [DataMember] public bool error { get { return fError; } set { fError = value; } } [DataMember] public string messageInformation { get { return fmessageInformation; } set { fmessageInformation = value; } } } }
J'ai parcouru le web et les tutoriels.
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 public Reponse GetDataUsingDataContract(Stream JSONdataStream) { Reponse result = new Reponse() { error = false, messageInformation = "ok" }; try { StreamReader reader = new StreamReader(JSONdataStream); string JSONdata = reader.ReadToEnd(); ObjetPost cust = jss.Deserialize<ObjetPost>(JSONdata); ObjetMessage MessagePost = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<ObjetMessage>(JSONdata); if (MessagePost == null) { result.messageInformation = "Impossible de décoder l'objet JSon"; result.error = true; return result; } if (MessagePost.data != null) { foreach (var item in MessagePost.data) { DoAjouterFichierLog("----id : " + item.id); DoAjouterFichierLog("----nature"); DoAjouterFichierLog("----name : " + item.nature.name); DoAjouterFichierLog("----type: " + item.nature.type); DoAjouterFichierLog("----source"); DoAjouterFichierLog("----installation : " + item.source.installation); DoAjouterFichierLog("----moduleUCG : " + item.source.moduleUCG); DoAjouterFichierLog("----detail"); DoAjouterFichierLog("----Date : " + item.detail.date); DoAjouterFichierLog("----Data : " + item.detail.data); DoAjouterFichierLog("----longData : " + item.detail.longData); DoAjouterFichierLog("----LpAlias : " + item.detail.lpAlias); result.error = false; } } else { DoAjouterFichierLog("MessagePost.data null"); } return result; } catch (Exception ex) { //result.MessageInformation = "Exception dans la lecture : " + ex.Message; DoAjouterFichierLog("Exception dans la lecture : " + ex.Message); return result; } }
Est-ce quelqu'un à une idée pour orienter mes recherches ?
merci d'avance
a+
Partager