2010-06-15 79 views
1

夥計們,如何在不同端點之間路由入站消息。WCF端點路由

我需要公開可接受不同憑據的單個端點。我猜想,通過攔截傳入消息並基於消息頭來解決這個問題,然後將消息轉發到適當的端點。

謝謝。

回答

0

基本上你需要爲你的攔截器創建一個自定義行爲。這個過程相當深奧,所以這裏是一個鏈接,而不是我輸入所有這些。

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

好,非常感謝另一種方法。 只是爲了確認,是否在讀取安全令牌之前觸發IDispatchMessageInspector?以及如何在不同的端點之間進行路由? 據我所知,IMessageInspector適用於DispatchRuntime,而這又適用於端點。 – 2010-06-16 04:13:36

+0

安全令牌在涉及到Web服務時是一個非常通用的術語,您能詳細說明您嘗試使用的安全令牌類型以及授權這些「不同憑證」的方式嗎? – CkH 2010-06-16 13:01:52