supongo que esto es posible, aunque no estoy seguro de que quieres esto. Tomaría el siguiente enfoque (no probado, no estoy seguro de si funciona).En primer lugar crear la siguiente estructura del proyecto en su solución:
ServiceInterfaces
ServiceImplementations
(referencias ServiceInterfaces
y ModelClasses
)
ModelClasses
Host
(Referencias ServiceInterfaces
y ServiceImplementations
)
Client
(referencias ServiceInterfaces
y ModelClasses
)
En ServiceInterfaces
tiene una interfaz como esta (Me salté los espacios de nombres, etc., para que el ejemplo sea más corto):
[ServiceContract]
public interface IMyService<T>
{
T GetObject(int id);
}
En ServiceImplementations
tiene una clase que 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.
}
}
En Host
tiene la configuración correcta para su servicio en un archivo App.config
(o Web.config
) y el siguiente código para alojar su servicio (dado que es una aplicación independiente) :
ServiceHost host = new ServiceHost(typeof(MessageManager.MessageManagerService))
host.Open();
Y finalmente en Client
se utiliza una clase ChannelFactory<TChannel>
para definir 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);
Una vez más, no estoy seguro de si esto funciona. El truco es compartir sus interfaces de servicio (en ServiceInterfaces
) y los objetos del modelo de dominio (en ModelClasses
) entre el host y el cliente. En mi ejemplo, uso una cadena para regresar del método de servicio, pero podría ser cualquier tipo de contrato de datos del proyecto ModelClasses
.
Consulte también http://stackoverflow.com/questions/6223886/servicio-de-servicio-interno –