2008-10-31 5 views
1

Nous avons actuellement développé une application utilisant WCF. Nos clients établissent des connexions à différents hôtes de service WCF situés sur le serveur, et les hôtes de service renvoient les données de la base de données dont les clients ont besoin. Modèle standard. Cependant, cette conception actuelle a toutes nos données WCF dans les fichiers app.config tant du côté client que du côté servicehost. Nous voulons rendre cela plus dynamique et avoir déplacé toutes les données, y compris les points de terminaison, les contrats et les liaisons, dans la base de données.Comment travailler avec des objets en utilisant Dynamic WCF?

Maintenant, la question est de savoir comment récupérer ces données et y accéder correctement. Nous travaillons avec un point de terminaison défini dans un fichier de configuration, et en utilisant ce point de terminaison, nous pouvons l'appeler pour obtenir le reste des informations de point de terminaison dont nous avons besoin (c'est-à-dire toutes les liaisons, tous les contrats et différents points de terminaison qu'elle avait définis dans son app.config). C'est le cas tant du côté client que du côté servicehost.

Le problème avec lequel je me bats maintenant est comment puis-je coder par rapport à ces points de terminaison dynamiques? Lorsque le client appelle l'hôte de service, il effectue non seulement des appels simples à l'hôte de service, mais récupère et renvoie les objets pour que l'hôte de service puisse les traiter selon les besoins. Par exemple, lors d'un chargement de formulaire, nous pouvons récupérer l'objet avec tous les paramètres actuellement définis dans la base de données, puis l'utilisateur fait quoi que ce soit sur le fornm, puis nous passons l'objet mis à jour à l'hôte de service. Nous pouvons le faire maintenant car dans Visual Studio 2008, nous avons ajouté toutes les références de service, qui ont généré automatiquement les méthodes et les objets qui peuvent être appelés et récupérés à partir des hôtes de service. Si nous passons à une connexion de point de terminaison dynamique, comment obtenons-nous ces données pendant la phase de développement? J'ai développé une application similaire dans .NET 2.0 à l'aide de .NET remoting, où nous passions l'objet d'avant en arrière, et le client et le serveur utilisaient tous deux la même classe de définition d'objet pour connaître l'objet . Je ne sais pas comment nous ferions cela avec la WCF.

Répondre

0

Définissez votre reliure et puis l'utiliser pour instancier le client.

BasicHttpBinding basic = new BasicHttpBinding(
     BasicHttpSecurityMode.TransportCredentialOnly); 
basic.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; 
EndpointAddress serviceAddress = new EndpointAddress(
     "http://whatever/service.svc"); 
YourServiceClient m_client = new YourServiceClient(basic, serviceAddress); 
+0

Cela fonctionne si je connais le type 'YourServiceClient'. Le problème que je rencontre est quand le type est retourné à partir d'un DB, et pas connu au moment de l'instanciation. – Noah

0

Vous n'avez pas besoin de compter sur le fichier app.config pour configurer le service, vous pouvez configurer le service lors de l'exécution, par ex. obtenir pour les liaisons, les points de terminaison ou les comportements de la base de données pour configurer l'objet servicehost. Cependant, les contrats de service, de données ou de message doivent être codés dans la solution ou dans le site Web référencé, sinon ils dégraderaient les performances en utilisant fortement la réflexion et beaucoup de complexité pour atteindre l'ensemble des caractéristiques dynamiques.

Dans votre scénario, je suppose que cela peut être fait d'une autre manière, par ex. traiter un message générique. Implémentez la logique de traitement des données de message dans la demande. Si tout va bien, vous pouvez obtenir plus d'idées en lisant les articles sur comment traiter n'importe quel message du client et du serveur.

http://msdn.microsoft.com/en-us/library/aa395208.aspx

Questions connexes