Bonjour,
J'ai un petit problème sur un service WCF appelé en REST et qui prend en entrée du JSON et retourne du JSON.
La signature du service wcf est la suivante :
Je n'ai pas de problème sur l'entrée, mais sur le message de sortie, c'est une autre histoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 [ServiceContract(Namespace = "http://www.mynamespace.com")] public class MyProxy { [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] ResponseClass Call(InMessage proxyMessage) { .... } }
Voici la classe de sortie :
Le message JSON reçu est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 [DataContract(Namespace = "http://www.mynamespace.com")] [KnownType(typeof(TrucMachin))] // Requis pour la sérialization de ServiceResult public class ResponseClass { [DataMember(Name = "ServiceResult", IsRequired = true)] public object ServiceResult { get; set; } [DataMember(Name = "Name", IsRequired = false, EmitDefaultValue = false)] public string Name { get; set; } }
Je voudrais supprimer le "__type":"NameSpace" de mon message JSON. De ce que j'ai pu lire sur le web lors de mes recherches, ce paramètre est ajouté pour ASP.NET AJAX, or, je ne l'utiliserai pas et je dois absolument avoir le message de réponse le plus petit possible (sans compression).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 {"CallResult":{"ServiceResult":{"__type":"TrucMachin:http:\/\/www.mynamespace.com","Name":"unevaleur"}}}
Divers sites indiquent qu'il faut alors configurer le behavior de l'endpoint en webHttp pour supprimer cette information de typage. Mais mon endpoint est déjà configuré ainsi, donc là... je suis à court d'idée.
Voici ma configuration WCF :
Est-ce que quelqu'un a déjà eu affaire avec cette problèmatique ? Et si oui, comment peut-on la résoudre ?
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 <system.serviceModel> <bindings> <webHttpBinding> <binding name="webHttpBindingMyProxy" /> </webHttpBinding> </bindings> <behaviors> <endpointBehaviors> <clear /> <behavior name="RestBehavior"> <webHttp/> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="MyProxyBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="MyProxyBehavior" name="UnNamespace.MyProxy"> <endpoint address="" binding="webHttpBinding" contract="UnNamespace.MyProxy" bindingConfiguration="webHttpBindingMyProxy" behaviorConfiguration="RestBehavior"/> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> <host> <baseAddresses> <add baseAddress="http://localhost:51589/MobileProxy.svc"/> </baseAddresses> </host> </service> </services> </system.serviceModel>
Je vous remercie d'avance pour votre aide,
Matthieu
Partager