2009-01-16 6 views
0

Je débutez avec WCF et souhaite mettre en place un système en réseau distribuable comme suit: (mais je ne suis pas sûr si elle est possible.)configurer Programatically opérations individuelles WCF avec différentes configurations WCF

J'ai client .net qui a une logique métier. Il aura besoin de diverses données provenant de diverses sources, donc je voudrais ajouter un «serveur» qui contient un cache en mémoire mais aussi des capacités WCF pour envoyer/recevoir et publier/s'abonner à partir de sources de données pour des données non mises en cache. Je pense qu'il devrait être possible que ces applications serveur soient identiques en termes de code, mais hautement configurables afin que les demandes puissent être traitées de pair à pair, ou client-serveur traditionnel selon les besoins. I pense cela pourrait être fait de sorte que, pour l'essentiel, un serveur envoie une requête là où le terminal est configuré et reçoit une réponse.

Essentiellement un serveur sera configuré comme ci-dessous:

Server A 
======== 

Operation 1 - Endpoint I 
Operation 2 - Endpoint II 


Server B 
======== 

Operation 1 - Endpoint IV 
Operation 2 - Endpoint III 

La configuration serait stocké pour chaque serveur de app.config et chargé dans la mémoire lors du démarrage. Ainsi, chaque opération WCF aurait sa propre configuration WCF (en termes de points de terminaison, etc.) et enverrait des demandes particulières à différents endroits en fonction de cette configuration. D'après ce que j'ai lu sur WCF, je pense que c'est possible. Je ne sais pas assez d'expérience pour savoir s'il s'agit d'un modèle standard de la WCF que je décris (si c'est le cas, faites-le moi savoir). Sinon, ma question principale est, comment puis-je configurer par programme chaque opération (comme ci-dessus) en WCF?

S'il vous plaît laissez-moi savoir si je ne me suis pas expliqué clairement.

Merci à l'avance pour toute aide, Will

Répondre

1

Je ne sais pas si ce exactement vous obtenez ce que vous cherchez, mais je ce que j'utilise pour ajouter mes critères d'évaluation de WCF à mon service Windows . Voici le code que le service va charger tous les services WCF:

IDictionary<string, ServiceHost> hosts; 
NetTcpBinding binding; 
CustomBinding mexBinding; 

private void AddService(Type serviceImp, Type serviceDef, string serviceName) 
    { 
     ServiceHost host = new ServiceHost(serviceImp); 

     string address = String.Format(baseAddress, wcfPort, serviceName); 

     string endAdd = address; 
     string mexAdd = address + "/mex"; 

     ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); 
     host.Description.Behaviors.Add(behavior); 
     host.AddServiceEndpoint(serviceDef, binding, endAdd); 
     host.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, mexAdd); 

     host.Open(); 

     hosts.Add(serviceDef.Name, host); 
    } 

Il y a une chaîne baseAddress que je ne copie pas, mais il a juste l'adresse net.tcp du point de terminaison. De même pour le wcfPort. Différentes bases et ports sont utilisés pour le débogage, les tests et la production. Au cas où cela ne soit pas clair, serviceImp est l'implémentation du service et serviceDef est l'interface qui définit le contrat. J'espère que cela t'aides.

EDIT - Voici quelques références que je faisais me aider tous ce genre de choses:

Creating WCF Service Host Programmatically
Net.Tcp Port Sharing Sample, Part 2
Service Station: WCF Addressing In Depth

1

Pour autant que je sais que vous ne pouvez pas spécifier la configuration par opération. Le niveau le plus bas est le niveau d'interface. La solution la plus simple (laide) serait de placer chaque opération dans une interface séparée.

+0

Merci Pawel qui est très utile de savoir. – WillH

+0

Mettre chaque opération dans une interface distincte est une approche de conception valide et bonne. Demande Agatha/Response Layer suit cette approche. Jetez un oeil à cela et cela est très utile et extensible http://code.google.com/p/agatha-rrsl/ –

0

La mise en œuvre de chaque opération dans une interface distincte est une approche de conception valide et de qualité. Demande Agatha/Response Layer suit cette approche.Jetez un oeil à ceci et cela est très utile et extensible

http://code.google.com/p/agatha-rrsl/