1

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

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

谢谢。

4

2 回答 2

0

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

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

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

于 2010-06-15T13:12:05.743 回答
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) 使用。

于 2010-06-15T12:47:26.800 回答