Suppongo che questo sia possibile, anche se non sono sicuro che ci si vuole questo. Prenderò il seguente approccio (non verificato, non sono sicuro che funzioni).In primo luogo creare la seguente struttura del progetto nella soluzione:
ServiceInterfaces
ServiceImplementations
(riferimenti ServiceInterfaces
e ModelClasses
)
ModelClasses
Host
(riferimenti ServiceInterfaces
e ServiceImplementations
)
Client
(riferimenti ServiceInterfaces
e ModelClasses
)
In ServiceInterfaces
si dispone di un'interfaccia come questo (ho saltato gli spazi dei nomi, ecc per fare l'esempio più breve):
[ServiceContract]
public interface IMyService<T>
{
T GetObject(int id);
}
In ServiceImplementations
si dispone di una classe che implementa 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.
}
}
In Host
hai la configurazione corretta per il tuo servizio in un file App.config
(o Web.config
) e il seguente codice per ospitare il tuo servizio (dato che si tratta di un'app standalone) :
ServiceHost host = new ServiceHost(typeof(MessageManager.MessageManagerService))
host.Open();
E infine in Client
si utilizza una classe ChannelFactory<TChannel>
per definire 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);
Anche in questo caso, non sono sicuro se questo funziona. Il trucco consiste nel condividere le interfacce di servizio (in ServiceInterfaces
) e gli oggetti del modello di dominio (in ModelClasses
) tra l'host e il client. Nel mio esempio, utilizzo una stringa per restituire dal metodo di servizio ma potrebbe essere qualsiasi tipo di contratto dati dal progetto ModelClasses
.
fonte
2009-08-31 20:18:26
Vedere anche http://stackoverflow.com/questions/6223886/generic-service-interface –