2010-05-06 9 views
9

¿Cuál es la mejor práctica para emular métodos sobrecargados sobre WCF?WCF Mejores prácticas para métodos "sobrecargados"

Normalmente yo podría escribir una interfaz como esta

interface IInterface 
{ 
    MyType ReadMyType(int id); 
    IEnumerable<MyType> ReadMyType(String name); 
    IEnumerable<MyType> ReadMyType(String name, int maxResults);  
} 

¿Cómo sería esta interfaz verá como después de que convertido a WCF?

+0

posible duplicado de [¿Por qué la sobrecarga de métodos no está permitida en WCF?] (Http://stackoverflow.com/questions/10276124/why-method-overloading-is-not-allowed-in-wcf) –

Respuesta

10

Puede dejarlo así si lo desea. Solo use la propiedad name del atributo OperationContract.

[ServiceContract] 
interface IInterface 
{ 
    MyType ReadMyType(int id); 
    [OperationContract(Name= "Foo")] 
    IEnumerable<MyType> ReadMyType(String name); 
    [OperationContract(Name= "Bar")] 
    IEnumerable<MyType> ReadMyType(String name, int maxResults);  
} 
+0

¿Qué haría eso? parece que no estoy familiarizado con eso? – Nate

+2

Esto funciona, aunque esto puede ser muy doloroso para mantenerse al día, rastrear, depurar, etc. Dependiendo de los productos que se conectan (por ejemplo, Perfil básico, etc.), aún puede ejecutar problemas. Aunque a los desarrolladores de la clase les parezca extraño, es mejor usar nombres más expresivos y no tener que mantener dos taxonomías separadas. – JoeGeeky

+0

Joe tiene razón, y es por eso que la mejor práctica es nombrar los métodos de manera única y no sobrecargarlos. Dicho esto, la respuesta es buena, simplemente no es la mejor práctica. :) – Chiramisu

5

Como ya dijo mwilson, WCF no permite que los métodos tengan el mismo nombre en la definición del servicio (WSDL).

Si tiene dos o más métodos (sobrecargados) con el mismo nombre en .NET, debe eliminar la ambigüedad para la definición del servicio WCF especificando un Name= en el atributo [OperationContract] para cada método.

Recuerde: WCF es no .NET (.NET o no solo) - es un estándar interoperable, y el estándar WSDL no es compatible actualmente con la sobrecarga de métodos - cada método debe ser únicamente identifyable por su nombre.

Cuestiones relacionadas