Nous avons donc un service "TradeService" qui expose l'opération "GetOrder" permettant de récupérer un ordre aussi bien pour un manager q'un analyste, l'opération "CreateOrder" destinée aux analystes pour créer un ordre et l'opération "ValidateOrder" destinée aux managers pour valider un ordre.
Le faire d'exposer le service sous la forme de deux contrats nous permettra ainsi d'exposer le contrat "IAnalysteTradeService" en protocole tcp sur le port 8000 (acteurs internes à l'entreprise) et d'exposer le contrat "IManagerTradeService" en protocole http sur le port 80 (acteurs externes à l'entreprise). Voici la configuration WCF correspondant à ce cas de figure :
<system.serviceModel>
<services>
<service behaviorConfiguration="serviceBehavior" name="TradeSystem.Services.TradeService">
<endpoint address="ManagerTradeService" binding="basicHttpBinding" bindingConfiguration="" name="managerEndPoint" contract="TradeSystem.Interfaces.IManagerTradeService" />
<endpoint address="AnalystTradeSystem" binding="netTcpBinding" bindingConfiguration="" name="analystEndPoint" contract="TradeSystem.Interfaces.IAnalystTradeService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:80" />
<add baseAddress="net.tcp://localhost:9000" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
L'un des problèmes de cette solution réside dans le fait où le client interroge les méta données du service, il récupéra aussi les opérations des deux acteurs (même si suivant le endpoint utilisé, il ne pourra utiliser que certaines de ces opérations). Pour éviter cela, le moyen est donc d'exposer non pas un service mais deux services.