WCF端点路由

时间:2010-06-15 09:22:24

标签: wcf routing credentials token forward

伙计们,如何在不同端点之间路由入站邮件。

我需要公开可以接受不同凭据的单个端点。我想,通过拦截传入的消息并基于消息头来解决这个问题,然后将消息转发到适当的端点。

感谢。

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:0)

您可以使用的另一种方法是创建自定义授权策略和管理器

http://msdn.microsoft.com/en-us/library/ms729794.aspx

http://msdn.microsoft.com/en-us/library/ms731774.aspx