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 :
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)
        {
          ....
        }
}
Je n'ai pas de problème sur l'entrée, mais sur le message de sortie, c'est une autre histoire.
Voici la classe de sortie :

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; }
}
Le message JSON reçu est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
{"CallResult":{"ServiceResult":{"__type":"TrucMachin:http:\/\/www.mynamespace.com","Name":"unevaleur"}}}
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).

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 :
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>
Est-ce que quelqu'un a déjà eu affaire avec cette problèmatique ? Et si oui, comment peut-on la résoudre ?

Je vous remercie d'avance pour votre aide,
Matthieu