2010-11-09 31 views
1

J'ai plusieurs services dans mon application. J'ai un contrat de données que j'ai besoin d'utiliser dans plus d'un service.Problème d'espace de nom avec le contrat de données WCF/problème de conception?

Par exemple: classe myCommonClass est utilisé dans deux de mes services service1 et service2

Pour ce faire, à un niveau de service, j'ai une bibliothèque MyApplication.Common et cette bibliothèque contient myCommonClass. Depuis mes deux services ont une référence à MyApplication.Common, ils peuvent tous les deux l'utiliser. Mon application client a des références de service à service1 et service2. Pour mon application cliente, service1.myCommonClass est un espace de noms distinct par rapport à service2.myCommonClass et est là que réside mon problème

Dans mes Reference.cs (générés par svcutil - l'espace de noms des deux classes est le même -à-dire

System.Runtime.Serialization.DataContractAttribute 
(Name="MyCommonClass", Namespace="http://A.B.MyCommonClassNamespace")]) 

Toutefois, ces deux éléments sont en 2 reference.cs séparés les fichiers et les espaces de noms dans le reference.cs est différent du fait de faire partie de deux références de services distincts.

Par conséquent, pour mon application client, ils apparaissent comme deux classes complètement indépendantes.

* Question 1 *: Est-il possible que je peux indiquer à mon application cliente qui service1.myCommonClass et service2.myCommonClass sont intrinsèquement la même classe?

* Question 2 *: Y a-t-il quelque chose de fondamentalement mauvais avec ma conception ici pour que j'exécute dans ce problème?

Répondre

1

Non, votre conception est bonne. Au lieu d'ajouter une référence de service à partir de Visual Studio, générez la classe proxy à l'aide de svcutil à l'invite de commande. Créez un projet de bibliothèque de classes et ajoutez-y les fichiers .cs générés. Vous pouvez créer un fichier de commandes et l'exécuter dans l'étape de pré-construction.
Utilisez svcutil comme ci-dessous pour générer la classe proxy dans un seul fichier de dll de service (la dll qui implémente vos deux services)

svcutil.exe /t:metadata "PATH\service1.dll" "PATH\service2.dll" 
svcutil.exe /t:code *.wsdl *.xsd /o:Proxy.cs 
+0

Merci. Je vais certainement essayer cela et mettre à jour comment ça se passe. – InSane