Fondamentalement, vous devez créer un comportement personnalisé pour votre intercepteur. Le processus est assez approfondi alors voici un lien, au lieu de taper tout cela.
http://msdn.microsoft.com/en-us/magazine/cc163302.aspx
Les principales étapes sont les suivantes:
Créer un comportement personnalisé
public class AuthorizationInterceptorBehavior: IEndpointBehavior, IServiceBehavior
{
//Code removed
...
}
Créer le BehaviorExtension:
public class AuthorizationInterceptorBehaviorExtensionElement : BehaviorExtensionElement
{
public override Type BehaviorType
{
get
{
return typeof(AuthorizationInterceptorBehavior);
}
}
protected override object CreateBehavior()
{
return new AuthorizationInterceptorBehavior();
}
}
}
Ensuite, créez votre intercepteur et de mettre tous de votre code dans la méthode AfterReceivedRequest:
public class AuthorizationInterceptor : IDispatchMessageInspector
{ //This class implements the IDispatchMessageInspector which provides the basic access to each message when it is received
//by the service and before is sent back to the client
#region IDispatchMessageInspector Members
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
//YOUR CODE HERE
...}
Ensuite, vous ajoutez simplement votre intercepteur à votre fichier de configuration:
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="authorizationInterceptor" type="YOUR.ASSEMBLY.AuthorizationInterceptorBehaviorExtensionElement, YOUR.ASSEMBLY, Version=X.X.X.X, Culture=neutral, PublicKeyToken=XXXXXXXXXX" />
</behaviorExtensions>
</extensions>
</extensions>
<behaviors>
<serviceBehaviors>
<behavior name="SomeServiceBehavior">
<authorizationInterceptor />
...
Si vous avez besoin d'aide ou des conseils, des commentaires et je vais revenir à vous avec plus de détails. Le plus difficile est de travailler avec la requête entrante, car elle n'est pas désérialisée à ce stade, donc vous devez travailler avec POX (Plain Ol 'Xml).
Ok, merci. Juste pour confirmer, IDispatchMessageInspector est-il déclenché avant de lire le jeton de sécurité? Et comment router entre différents points de terminaison? Comme je le sais, IMessageInspector s'applique à DispatchRuntime qui à son tour s'applique à l'extrémité. –
Security Token est un terme assez générique quand il s'agit de services Web, pourriez-vous élaborer sur quel type de jeton de sécurité que vous essayez d'utiliser et comment vous autorisez ces «Credentials différents»? – CkH