Конечная точка WCF - PullRequest
1 голос
/ 15 июня 2010

Ребята, как маршрутизировать входящее сообщение между разными конечными точками.

Мне нужно предоставить единственную конечную точку, которая может принимать разные учетные данные.Я думаю, решить эту проблему путем перехвата входящего сообщения и на основе заголовка сообщения, а затем переслать сообщение на соответствующую конечную точку.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 июня 2010

Другим подходом, который вы можете использовать, может быть создание привычной Политики авторизации и менеджера

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

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

0 голосов
/ 15 июня 2010

В основном вам нужно создать собственное поведение для вашего перехватчика.Процесс довольно глубокий, так что вот ссылка, вместо того, чтобы я печатал все это.

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 (обычный XML).

...