2010-06-15 4 views
1

Ребята, как маршрутизировать входящее сообщение между различными конечными точками.Маршрутизация конечной точки WCF

Мне нужно разоблачить единственную конечную точку, которая может принимать разные учетные данные. Я думаю, разрешите это, перехватив входящее сообщение и на основе заголовка сообщения, затем передайте сообщение соответствующей конечной точке.

Спасибо.

ответ

0

В принципе, вам необходимо создать собственное поведение для вашего перехватчика. Процесс довольно indepth, поэтому вот ссылка, вместо того, чтобы набирать все это.

http://msdn.microsoft.com/en-us/magazine/cc163302.aspx

Основные шаги:

Создание пользовательского поведения

public class AuthorizationInterceptorBehavior: IEndpointBehavior, IServiceBehavior 
    { 
//Code removed 
... 
} 

Создание BehaviorExtension:

public class AuthorizationInterceptorBehaviorExtensionElement : BehaviorExtensionElement 
    { 
     public override Type BehaviorType 
     { 
      get 
      { 
       return typeof(AuthorizationInterceptorBehavior); 
      } 
     } 

     protected override object CreateBehavior() 
     { 
      return new AuthorizationInterceptorBehavior(); 
     } 
    } 
} 

Затем создать свой перехватчик и поместить весь код в методе 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 
...} 

Тогда вы просто добавить перехватчик в файл конфигурации:

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

Если вам нужна дополнительная помощь или руководство, комментарий, и я вернусь к вам с большим количеством деталей. Самая сложная часть работает с входящим запросом, поскольку в данный момент она не десериализована, поэтому вам нужно работать с ней как POX (Plain Ol 'Xml).

+0

Ok, спасибо. Просто для подтверждения, IDispatchMessageInspector запускается перед чтением маркера безопасности? А как проложить маршрут между разными конечными точками? Как я знаю, IMessageInspector применяется к DispatchRuntime, которое в свою очередь относится к конечной точке. –

+0

Значок безопасности - довольно общий термин, когда речь заходит о веб-сервисах, не могли бы вы рассказать о том, какой маркер безопасности вы пытаетесь использовать и как вы авторизуете эти «разные учетные данные»? – CkH

Смежные вопросы