2009-02-23 5 views
0

J'ai un projet de service Web qui contient 2 fichiers asmx. Appelons-les internal.asmx & external.asmx En pratique, ceux-ci ont des clients différents:Gestion de 2 références Web avec dépendance de classe partagée dans un projet .NET

En externe, un client appelle externalWS.PersistOrder (ordre de commande) et en interne, nous traitons la commande internalWS ProcessOrder (ordre de commande). Par conséquent, la classe Order est une dépendance partagée entre ces services Web. Je suis en train d'écrire une application de test qui appelle différentes méthodes web sur ces deux webservices.

Je rencontre des problèmes car les services Web utilisent la même classe. Afin d'utiliser les deux méthodes web, j'ajoute 2 webreferences à mon projet de test. Cependant, il existe deux copies des classes dépendantes, avec des espaces de noms différents. Comme correction à court terme, je suis en train d'éditer les classes que VS crée.

Il doit y avoir un meilleur moyen! Merci d'avance pour votre aide.

Répondre

1

Je ne suis pas sûr de savoir comment (et si) vous pouvez modifier le comportement de l'assistant de référence Web VS. Toutefois, vous pouvez utiliser wsdl.exe ou svcutil.exe (selon que vous souhaitez utiliser le proxy client System.Web ou WCF dans vos services) à partir de la ligne de commande et spécifier l'option appropriée pour les types partagés. Pour wsdl.exe, l'option de ligne de commande que vous souhaitez est /sharetypes, bien que je ne l'ai pas touchée depuis des années, donc je ne me souviens pas des détails d'utilisation exacte. Pour svcutil.exe, l'option de la ligne de commande que vous voulez est/reference: (0). Cela vous permet d'avoir la classe partagée dans un assembly que vous pouvez référencer. Si la seule définition de la classe partagée que vous pouvez obtenir se trouve dans le WSDL des deux services, vous devrez peut-être utiliser svcutil.exe pour générer le proxy client, le réduire pour ne contenir que la classe partagée et créer un assembly de référence pour les proxys clients réels pour les deux services. L'inconvénient de cette approche est que si le WSDL de l'un des services change, vous devez réexécuter l'outil. Cela peut être atténué en ajoutant une tâche personnalisée à la cible BeforeBuild dans votre projet qui exécute l'outil toujours sur les deux services.

+0

Merci Franci. VS.NET ne supporte pas cela, mais ce sont des solutions de contournement utilisant les outils de sous-couche utilisés par VS.NET. Heureux d'entendre que je ne manquais pas une approche évidente à ce problème. Brian –

+0

VS.NET ne supporte pas cela avec les anciens services ASMX, mais avec WCF, qui devrait être utilisé pour tout nouveau développement. –

Questions connexes