2010-05-06 18 views
9

Qual è la procedura migliore per emulare i metodi sovraccaricati su WCF?WCF Best Practice per metodi "overload"

genere potrei scrivere un'interfaccia come questo

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

Cosa sarebbe questo aspetto dell'interfaccia come dopo si convertita in WCF?

+0

possibile duplicato di [Perché l'overloading del metodo non è consentito in WCF?] (Http://stackoverflow.com/questions/10276124/why-method-overloading-is-not-allowed-in-wcf) –

risposta

10

Puoi lasciarlo così, se ti va. Basta usare la proprietà name dell'attributo 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

Cosa vorrebbe sembra che non mi sia familiare? – Nate

+2

Questo funziona, anche se questo può essere molto doloroso per tenere il passo con, traccia, debug, ecc ... A seconda dei prodotti di connessione (es. Profilo di base, ecc.) È ancora possibile eseguire i problemi. Anche se sembra strano agli sviluppatori di classe, potrebbe essere meglio usare solo nomi più espressivi e non dover mantenere due tassonomie separate – JoeGeeky

+0

Joe ha ragione, che è proprio il motivo per cui la migliore pratica è quella di denominare i metodi in modo univoco e non sovraccaricarli. Detto questo, la risposta è buona, ma non la migliore pratica. :) – Chiramisu

5

Come mwilson già detto - WCF non permette metodi per avere lo stesso nome nella definizione del servizio (WSDL).

Se si dispone di due o più metodi (overload) con lo stesso nome in .NET, è necessario disambiguare loro per la definizione del servizio WCF specificando un Name= l'attributo [OperationContract] per ogni metodo.

Ricorda: WCF è non .NET (o non solo NET) - è uno standard interoperabile, e lo standard WSDL attualmente non supporta overloading dei metodi - ogni metodo deve essere univocamente identificabili in base al nome.