2012-01-10 2 views
0

J'ai un service Web WCF WF (service de workflow 4.0) et chaque opération de ce service a la même signature, mais un nom différent.Comment spécifier l'opération WCF à appeler lors de l'exécution?

Mon système reçoit un événement {int eventType, int entityId} et doit envoyer cet événement à une opération sur le service Web que j'ai mentionné ci-dessus en utilisant la configuration.

E.g. suppose que j'ai le fichier de configuration (qui mappe eventType à un nom d'opération):

1 -> "StartOrder" 
5 -> "StopOrder" 
8 -> "ProcessPaymet" 
9 -> "RepartFraud" 

donc si je reçois eventType égale à 5 que je dois faire quelque chose comme:

string operationName = eventTypeToOperationMap[eventType]; 
new ChannelFactory<IMyWebService>().CreateChannel().CallOperation(operationName, entityId); 

et IMyWebService a une méthode:

void StopOrder(int entityId); 

Contexte: IMyWebService est windows Workflow Foundation 4.0 service de workflow. Je veux être en mesure d'ajouter un nouveau point d'entrée au service Web et de modifier le fichier de configuration pour le répartiteur d'événements, sans avoir à recompiler le répartiteur d'événements.

+0

Bonjour THX, pourriez-vous envisager de refactoriser votre interface de service afin qu'elle prenne un int eventType comme paramètre d'entrée? Votre code de service pourrait alors se connecter en conséquence. Cela signifierait passer d'une interface de service à grain fin à une interface plus générique. Je n'ai pas mis cela comme une réponse car elle ne répond pas à la question que vous avez posée, mais je pensais que ce pourrait être une approche alternative qui pourrait vous sortir d'un trou. –

Répondre

0

Vous aurez probablement besoin d'appeler un autre service (ou une autre opération sur votre service) qui prend l'eventType en tant que paramètre. Dans cette opération, vous allez créer un nouveau canal et appeler l'opération correspondante (comme vous le faites déjà).

Questions connexes