2010-07-14 4 views
0

J'ai un service WCF 4.0 REST Application que je voudrais intercepter une demande entrante et vérifier un en-tête personnalisé. Dans ma solution que je utilise le paramètre par défaut suivantRequestInterceptor dans l'application de service REST WCF 4.0

<standardEndpoints> 
<webHttpEndpoint> 
     <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" /> 
</webHttpEndpoint> 
</standardEndpoints> 

J'ai essayé de créer un IDispatchMessageInspector et correspondant BehaviorExtensionElement et en ajoutant le behaviorExtension approprié et endPointBehavior à mon web.config. Que dois-je faire d'autre pour faire tirer l'intercepteur? Je suppose que mon manque total de connaissances sur le fonctionnement réel de la WCF me tue ici. Mon IParameterInspector était facile à implémenter et fonctionne parfaitement. J'espérais que cela serait aussi facile à mettre en œuvre.

Répondre

0

Suivi:


Depuis mon objectif de la RequestInterceptor se concentrait sur l'authentification, j'ai pu obtenir mon résultat désiré à l'aide d'une classe dérivée de ServiceAuthorizationManager et ajouté à web.config comme suit.

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <!-- This behavior enables Auth Token Verification --> 
     <serviceAuthorization serviceAuthorizationManagerType="Something.Service.Authorization, Something.Service" /> 
     <serviceMetadata httpGetEnabled="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
+0

Avez-vous avoir un exemple d'intercepteur que vous avez utilisé pour l'authentification? – BenAlabaster

0

Pour allumer le feu intercepteur, vous devez aussi mettre en œuvre votre usine d'accueil personnalisée, puis ajoutez les intercepteurs à votre service comme ci-dessous, après avoir implémenté votre intercepteur de demande personnalisée à l'aide Microsoft.ServiceModel.Web.RequestInterceptor

public class MyCustomHostFactory : ServiceHostFactory 
    { 
     protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
     { 
     var serviceHost = new WebServiceHost2(serviceType, true, baseAddresses); 
     RequestInterceptor interceptor = MySolution.RequestInterceptorFactory.Create(); 
     serviceHost.Interceptors.Add(interceptor); 
     return serviceHost; 
     } 
    }