Nous avons une application existante pour laquelle un de nos objets DTO a une propriété tapée IDictionary<string, object>
. Je cherche maintenant à exposer cet objet à travers un service WCF. Cela fonctionne dans certains cas, mais pas dans le cas général. Pour démontrer le problème, tenez compte des deux méthodes suivantes:Sérialisation IDictionary <chaîne, objet> dans WCF
[OperationContract]
public IDictionary<string, object> Test1()
{
return new Dictionary<string, object>
{
{ "testkey1", "newstringvalue"},
};
}
[OperationContract]
public IDictionary<string, object> Test2()
{
return new Dictionary<string, object>
{
{ "testkey1", "newstringvalue"},
{ "testkey2", new object [] { "one" , "two", "three", } }
};
}
Méthode Test1() fonctionne comme prévu, mais quand je l'appelle Test2(), je reçois une erreur d'exécution étrange sur le client:
The request channel timed out while waiting for a reply after 00:01:00. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.
Inner exception: The remote server returned an error: (504) Gateway Timeout.
Ceci en dépit du fait que l'exception a été lancée instantanément, à savoir. Je n'ai pas vraiment attendu une minute pour cette réponse. Aucune erreur n'est affichée sur le serveur.
Je suppose que cela provient du fait que le sérialiseur ne peut pas sérialiser l'objet [], mais ce n'est pas ce qui est indiqué par l'erreur.
Mes questions sont les suivantes:
- ce qui se passe ici?
- Comment est-ce que je travaille autour de ceci afin que je puisse sérialiser mes objets correctement?
Merci.
Est-ce que ce doit être un objet? si c'est une collection de chaînes, ne pouvez-vous pas utiliser une liste, un tableau, etc.? – timothyclifford