2010-06-15 80 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