/ / Duplication de définition de classe dans les classes proxy WCF du client .NET pour le service Web Java - .net, wcf, services Web, wsdl

Duplication de définition de classe dans les classes proxy WCF du client .NET pour le service Web Java - .net, wcf, services Web, wsdl

Je travaille sur un.Client NET WCF pour un service Web Java. Je peux générer les classes de proxy .NET avec succès à partir du service Web Java WSDL et appeler le service via une classe de proxy. Un problème est la duplication de classe dans les classes proxy. Supposons que nous ayons deux services Web java: java_a et java_b, les deux font référence à une classe common_class.

Maintenant, si je génère deux classes de proxy .NET pour les deux services Web Java sur le client, disons: proxy_a et proxy_b. Maintenant, dans les deux classes de proxy, il existe une classe appelée common_class, l'un est proxy_a.common_class et un autre est proxy_b.common_class. Je veux écrire une classe d'aide pour les deuxclasses proxy côté client mais c'est difficile de gérer la common_class. Je dois écrire de nombreux codes de duplication pour manipuler les deux common_class, ce qui ne devrait pas se produire à mon avis. Il devrait être possible de modifier manuellement les classes proxy pour extraire la common_class mais comme je devrai mettre à jour les classes proxy très souvent, il sera très pénible de faire le travail manuel.

Ma question est donc: comment éviter une telle duplication de définition de classe lors de la génération de classes proxy?

Meilleures salutations, - Bruce

Réponses:

0 pour la réponse № 1

Vous pouvez modifier physiquement une classe et ne pas l'ajoutercomme fichier ordinal dans un projet, mais comme référence à un fichier, dans les deux projets. malheureusement, vous devez supprimer la déclaration d'espace de noms de ce fichier, sinon deux proxy ne fonctionneront pas non plus.


0 pour la réponse № 2

Vous pouvez résoudre ce problème en modifiant manuellement le fichier .SvcMap.

Créez les classes proxy pour le premier service Web (proxy_a).

Accédez ensuite à l'Explorateur de solutions et assurez-vous que l'option "Afficher tous les fichiers" est cochée.

entrer la description de l'image ici

Ouvrez maintenant le fichier Reference.svcmap et recherchez le nœud MetadataSources.

Par exemple:

<MetadataSources>
<MetadataSource Address="http://www.example.com/proxy_a/mex"
Protocol="mex" SourceId="1" />
</MetadataSources>

Ajoutez simplement l'URL du deuxième service (proxy_b) à ce nœud. N'oubliez pas d'incrémenter l'attribut SourceId.

<MetadataSources>
<MetadataSource Address="http://www.example.com/proxy_a/mex"
Protocol="mex" SourceId="1" />
<MetadataSource Address="http://www.example.com/proxy_b/mex"
Protocol="mex" SourceId="2" />
</MetadataSources>

Faites un clic droit sur la référence du service et sélectionnez«Update Service Reference» afin de régénérer le code côté client. Maintenant, si l'entreprise qui a correctement construit les services et attribué des espaces de noms là où cela était nécessaire, un seul type sera créé pour la classe commune qu'ils partagent.

Besoin de plus d'informations? J'ai écrit un article sur ce problème il y a environ un mois:

http://cgeers.com/2011/07/31/wcf-sharing-types-using-svcmap/

J'espère que cela aide.