WCF contrat de retourner interface pourrait causer la sérialisation problème?
Je suis en train de définir un WCF contrat qui retourne une interface, quelque chose comme ci-dessous:
[ServiceContract]
public interface IMyContracts
{
[OperationContract]
IMyInterface GetData(string request);
}
Pour obtenir que cela fonctionne, je pense que mon interface (IMyInterface
) pour la mise en œuvre ISerializable
pour assurer des classes de mise en œuvre de mon interface peut être sérialisé. Ensuite, cela signifie que je dois manuellement en œuvre de la sérialisation pour toutes les classes de la mise en œuvre de mon interface.
Il semble que ce soit-je utiliser mon interface et les risques d'erreurs d'exécution si une classe est utilisée qui n'est pas sérialisable, ou je fais l'interface de mettre en œuvre ISerializable
et ont associé les tracas de la mise en œuvre manuelle.
Je confonds moi-même et manquant quelque chose d'évident? Comment avoir d'autres personnes renvoyées des interfaces en utilisant WCF et d'éviter ce problème?
Merci beaucoup.
OriginalL'auteur WillH | 2009-01-06
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, le problème n'est pas avec la sérialisation, mais avec le fait que vous êtes de retour entité abstraite (une interface). L'Abstraction est un OO concept, un pas concept SOA. Ainsi, votre client wcf pile peut ne pas savoir quoi faire avec la classe derrière l'interface. Que faire si le client ne connaît pas la classe derrière l'interface. Client WCF pile doit désérialiser, et pour ce faire, il doit connaître la classe.
Donc, vous devez faire de la ou des classe(s) derrière l'interface de votre contrat, via KnownTypeAttribute.
Vous pouvez également utiliser ServiceKnownTypeAttribute classe qui semble être plus flexible. Encore, n'oubliez pas que le client doit connaître le type, ou vous aurez une exception.
Il n'est pas vrai que “le client WCF pile doit désérialiser”, et n'ont pas à connaître la classe. Il est censé utiliser un proxy transparent et de canaliser toutes les méthode de l'interface des appels vers le serveur qui dispose de l'instance. Le point des interfaces, de sorte que vous pouvez fournir des fonctionnalités à un client qui ne connaît pas votre type de béton. (En d'autres mots, votre réponse n'aide pas.)
avec tout le respect dû, je pense que vous avez mal compris la question, ou comment WCF œuvres. Plutôt que de simplement en affirmant Il n'est pas vrai s'il vous plaît fournir une référence à une source qui sauvegarde votre demande.
Il est vrai que je ne sais pas WCF très bien. Je sais .NET Remoting bien, et je ne pense pas que j'ai à l'arrière de la revendication que le .NET prend en charge de manière transparente objets proxy pour les types d'interface parce que tous ceux qui ont déjà utilisé .NET Remoting les a vus. Si FMC exige que le client désérialiser une classe, alors il dénonce ne tient pas compte de la plus évidente de cas d'utilisation, qui est d'accéder à un objet sur un serveur distant (qui peut ou peut ne pas être sérialisable).
Si c'est effectivement le cas, alors “vous ne pouvez pas le faire avec WCF en raison de la WCF ne le supporte pas” serait plus utile (et plus honnête) réponse qu'un seul qui fait des fausses allégations telles que “le client WCF pile doit désérialiser quelque chose”, ou un système qui encourage les programmeurs de casser la mise en œuvre de l'encapsulation et/ou de la conception de gaping trous de sécurité dans leurs applications (“vous devez faire de la ou des classe(s) de votre contrat”).
OriginalL'auteur Krzysztof Kozmic
Dans ce post, je vais dans les détails de comment faire de la WCF de travail pour la réception et le retour de issus des classes et des interfaces.
http://codeonaboat.wordpress.com/2010/03/01/serializing-and-deserializing-derived-types-or-interfaces-in-wcf/
OriginalL'auteur floatingfrisbee