2010-05-28 4 views
0

Je souhaite ajouter une méthode supplémentaire pour chaque opération de service dans mon code de proxy client WCF (c'est-à-dire la classe générée qui dérive de ClientBase). J'ai écrit une extension Visual Studio qui a une implémentation IOperationContractGenerationExtension, mais cette interface semble seulement exposer la possibilité de modifier l'interface de service, pas la classe dérivée ClientBase.Ajout de méthodes au code de proxy client WCF généré

Existe-t-il un moyen de générer de nouvelles méthodes dans la classe de client proxy?

+0

L'extension IOperationContextGenerationExtension est en effet un point d'extension côté serveur pour WCF. Qu'est-ce que vous voulez réaliser? Juste ajouter quelques méthodes à la classe proxy? Vois ma réponse. Faire quelque chose de plus ?? –

+0

Je ne pense pas qu'il soit juste de dire que IOperationContextGenerationExtension est côté serveur. Il se connecte au processus d'importation et est donc côté client (par rapport au service Web). Au moins, c'est comme ça que je l'utilise. – dcstraw

Répondre

0

Je suis autour en générant une enveloppe par classe pour la classe dérivée de ClientBase pendant le processus d'importation. J'ai d'abord essayé de générer une classe partielle supplémentaire avec le même nom que la classe client, mais cela a causé le reste de la génération de code à cesser de fonctionner correctement.

Donc, mon dernier code généré ressemble à quelque chose comme:

(générée par le générateur proxy WCF intégré):

public interface ServiceReference1 
{ 
    IAsyncResult BeginWebMethod1(AsyncCallback callback, object asyncState); 
    void EndWebMethod1(IAsyncResult result); 

    IAsyncResult BeginWebMethod2(AsyncCallback callback, object asyncState); 
    void EndWebMethod2(IAsyncResult result); 

    // ... 
} 

public class ServiceReference1Client 
{ 
    public event EventHandler<AsyncCompletedEventArgs> WebMethod1Completed; 
    public event EventHandler<AsyncCompletedEventArgs> WebMethod2Completed; 

    public void WebMethod1Async() { /* ... */ } 
    public void WebMethod2Async() { /* ... */ } 

    // ... 
} 

(généré par mon habitude IOperationContractGenerationExtension):

public class ServiceReference1Wrapper 
{ 
    private ServiceReference1Client _client; 

    public ServiceReference1Wrapper(ServiceReference1Client client) 
    { 
     _client = client; 
    } 

    public IObservable<AsyncCompletedEventArgs> WebMethod1() 
    { 
     _client.WebMethod1Async(); 
     // ... 
    } 

    public IObservable<AsyncCompletedEventArgs> WebMethod2() 
    { 
     _client.WebMethod2Async(); 
     // ... 
    } 

    // ... 
} 

Note: J'utilise Silverlight, c'est pourquoi tout est asynchrone.

2

Pour autant que je sache, ces classes sont toujours classes partielles:

public partial class MyWCFServiceClient : ClientBase<IMyWCFService>, IMyWCFService 
{ 
    ... 
} 

de sorte que vous pouvez facilement les étendre avec votre deuxième fichier qui ajoute méthode à la même classe partielle:

YourOwnFile.cs

public partial class MyWCFServiceClient 
{ 
    public void NewMethod1() 
    { 
    } 

    public void NewMethod2() 
    { 
    } 
} 
+0

Merci pour la réponse. Ce que j'essaie de faire est de générer automatiquement les méthodes supplémentaires. Je voudrais éviter de les écrire à la main si cela est possible. – dcstraw

+0

@dcstraw: auto-générer en fonction de quoi? Que font ces méthodes? WCF a beaucoup de points d'extensibilité - à la fois sur le client et le serveur - mais vous devez être un peu plus précis sur ce que vous essayez de faire afin que nous puissions vous aider et vous orienter dans la bonne direction –

+0

Je veux ajouter une méthode pour chaque opération qui retourne un IObservable afin que je puisse utiliser Rx avec les méthodes de service Web sans avoir à créer manuellement IObservables à partir des événements asynchrones. – dcstraw

Questions connexes