2010-06-15 7 views
1

Les gars, comment router le message entrant entre différents points de terminaison.Routage de point de terminaison WCF

J'ai besoin d'exposer le point de terminaison unique qui pourrait accepter des informations d'identification différentes. Je suppose, résoudre cela en intercepter le message entrant et en fonction de l'en-tête du message, puis transmettre le message à l'extrémité appropriée.

Merci.

Répondre

0

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).

+0

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é. –

+0

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

Questions connexes