Mi aplicación tiene 2 "servicios", digamos que una es una calculadora básica (entera), y una es una calculadora de coma flotante. Los expreso como interfaces así:WCF y herencia de interfaz: ¿es algo terrible de hacer?
public interface IBasicCalculator
{
int Add(int a, int b);
}
public interface IFloatingPointCalculator
{
double Add(double a, double b);
}
Quiero exponer estos a través de WCF. Lamentablemente, WCF parece estar estrechamente ligada a la noción de que cada operación posible que desee exponer debe pasar por una única interfaz de servicio: no puede compartir sesiones entre servicios, es engorroso desde el lado del cliente ya que necesita crear un proxy separado para cada uno, no parece haber ningún "sub-servicios", etc.
Por lo tanto, he deducido que necesito presentar una interfaz "combinada" (también se podría llamarla) una fachada), así:
[ServiceContract]
public interface ICalculatorService : IBasicCalculator, IFloatingPointCalculator
{
[OperationContract(Name = "AddInt")]
new int Add(int a, int b);
[OperationContract(Name = "AddDouble")]
new double Add(double a, double b);
}
Si hago esto, entonces WCF expone dos métodos para el cliente, que se les puede llamar, y todo funciona realmente.
Sin embargo, "heredar las interfaces" parece ser desgarbado. Particularmente la new
int Add
y new
double Add
. Estrictamente hablando, new
en un método indica que se oculta un método subyacente, que en realidad no estoy haciendo en absoluto. Puedo omitir el new
, pero luego recibo advertencias del compilador que equivalen a "Creo que estoy ocultando este método, necesitas cambiarle el nombre a método o poner 'nuevo' en él".
Por lo tanto, esta es una cuestión de 2 partes:
¿Estoy en la pista con mi 'combinar todo en una interfaz' lógica, o hay realmente una manera de exponer "sub-services" o "múltiples servicios vinculados" usando WCF?
Si esto es lo que hay que hacer, ¿hay una manera mejor?
Gracias!
A propósito, estoy usando una interfaz de marcador como base para todos mis contratos de datos. Esto me permite tratar genéricamente contratos de datos dentro de mi marco WCF. –
Acabo de utilizar la herramienta de "agregar referencia de servicio" del estudio visual - generó una biblioteca cliente - en esa biblioteca había una clase proxy por punto final (de ahí muchas clases en la biblioteca), pero todas las clases "proxy" de la único objeto en el servidor, por lo que no importa que estén separados –
Cool, por lo que está implementando más de un contrato de servicio en un solo servicio. Genial, eso significa que su punto de fricción nunca fue la cantidad de proxies, sino la cantidad de servicios, y ahora sabe cómo lograr lo que está describiendo. Guay. –