Je suppose que cela est possible, bien que je ne suis pas sûr que vous le souhaitez. Je prendrais l'approche suivante (non testée, je ne sais pas si ça marche).Tout d'abord créer la structure de projet suivante dans votre solution:
ServiceInterfaces
ServiceImplementations
(références ServiceInterfaces
et ModelClasses
)
ModelClasses
Host
(références ServiceInterfaces
et ServiceImplementations
)
Client
(références ServiceInterfaces
et ModelClasses
Dans ServiceInterfaces
vous avez une interface comme celui-ci (je sautais les espaces de noms, etc pour rendre l'exemple plus court):
[ServiceContract]
public interface IMyService<T>
{
T GetObject(int id);
}
En ServiceImplementations
vous avez une classe qui implémente IMyService<T>
:
public class MyService<T> : IMyService<T>
{
T GetObject(int id)
{
// Create something of type T and return it. Rather difficult
// since you only know the type at runtime.
}
}
Dans Host
vous avez la configuration correcte pour votre service dans un fichier App.config
(ou Web.config
) et le code suivant pour héberger votre service (étant donné qu'il s'agit d'une application autonome) :
ServiceHost host = new ServiceHost(typeof(MessageManager.MessageManagerService))
host.Open();
Et enfin Client
vous utilisez une ChannelFactory<TChannel>
classe pour définir un proxy:
Binding binding = new BasicHttpBinding(); // For the example, could be another binding.
EndpointAddress address = new EndpointAddress("http://localhost:8000/......");
IMyService<string> myService =
ChannelFactory<IMyService<string>>.CreateChannel(binding, address);
string myObject = myService.GetObject(42);
Encore une fois, je ne sais pas si cela fonctionne. L'astuce consiste à partager vos interfaces de service (dans ServiceInterfaces
) et les objets de modèle de domaine (dans ModelClasses
) entre l'hôte et le client. Dans mon exemple, j'utilise une chaîne pour renvoyer de la méthode de service, mais il peut s'agir de n'importe quel type de contrat de données du projet ModelClasses
.
Voir aussi http://stackoverflow.com/questions/6223886/generic-service-interface –