Wir haben eine vorhandene Anwendung, für die eines unserer DTO-Objekte eine Eigenschaft hat, die als IDictionary<string, object>
typisiert wird.Serialisierung von IDictionary <string, object> in WCF
Ich versuche nun, dieses Objekt über einen WCF-Dienst verfügbar zu machen. Dies funktioniert in einigen Fällen, aber nicht im allgemeinen Fall. Um das Problem zu demonstrieren, sollten Sie die folgenden zwei Methoden:
[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", } }
};
}
Methode Test1() funktioniert wie erwartet, aber wenn ich Test2() aufrufe, erhalte ich einen seltsamen Laufzeitfehler auf dem 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.
Dies ist trotz der Tatsache, dass die Ausnahme sofort ausgelöst wurde, dh. Ich musste nicht wirklich eine Minute auf diese Antwort warten. Auf dem Server wird kein Fehler angezeigt.
Ich vermute, dass dies von der Tatsache herrührt, dass der Serializer Objekt [] nicht serialisieren kann, aber das ist nicht, was durch den Fehler angezeigt wird.
Also meine Fragen sind:
- Was ist hier los?
- Wie kann ich das umgehen, damit ich meine Objekte korrekt serialisieren kann?
Danke.
Muss es ein Objekt sein? Wenn es sich um eine Sammlung von Strings handelt, können Sie keine Liste, Array usw. verwenden? – timothyclifford