伙计们,如何在不同端点之间路由入站邮件。
我需要公开可以接受不同凭据的单个端点。我想,通过拦截传入的消息并基于消息头来解决这个问题,然后将消息转发到适当的端点。
感谢。
答案 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)
您可以使用的另一种方法是创建自定义授权策略和管理器