문제

Unity 컨테이너 내에서 호스팅 할 WCF 서비스가 있습니다. 이 컨테이너를 사용하여 방법 차단을 수행하려고했습니다. 문제는 인터셉터를 발사 할 수 없다는 것입니다 ...

먼저 여기에서 내 인터셉터 속성 및 처리기의 정의 :

[AttributeUsage(AttributeTargets.Method)]
public class PCSecurityAttribute : HandlerAttribute
{
    public PCSecurityAttribute(Modules module, int modulePermission)
    {
        SecurityModule = module;
        SecurityModulePermission = modulePermission;
    }

    public Modules SecurityModule
    {
        get;
        set;
    }

    public int SecurityModulePermission
    {
        get;
        set;
    }

    public override ICallHandler CreateHandler(IUnityContainer container)
    {
        return new PCSecurityCallHandler(0, SecurityModule, 
           SecurityModulePermission);
    }
}

using System.ServiceModel.Security;
using MHC.PracticeConnect.Contract.Data.Security;
using Microsoft.Practices.Unity.InterceptionExtension;

namespace MHC.PracticeConnect.Service
{
    public class PCSecurityCallHandler : ICallHandler
    {
        private Modules securityModule;
        private int securityModulePermission;

        public PCSecurityCallHandler(Modules module, int modulePermission)
        {
            securityModule = module;
            securityModulePermission = modulePermission;
            Order = 0;
        }

        public PCSecurityCallHandler(int order, Modules module, 
            int modulePermission)
        {
            securityModule = module;
            securityModulePermission = modulePermission;
            Order = order;
        }

        public IMethodReturn Invoke(IMethodInvocation input,
            GetNextHandlerDelegate getNext)
        {
            bool validPermission = false;
            // check security permission

            IMethodReturn result;

            if (validPermission)
                result = getNext().Invoke(input, getNext);
            else
                throw new SecurityAccessDeniedException(
                    "The current user does not have security " +
                    "permissions to call this module.");

            return result;
        }

        public int Order
        {
            get;
            set;
        }
    }
}

내 호스트에서는 가로 채기를 사용하도록 구성하려고 노력했습니다.

public class DocumentTemplateServiceHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, 
        Uri[] baseAddresses)
    {
        UnityServiceHost host = 
            new UnityServiceHost(serviceType, baseAddresses);
        UnityContainer unity = new UnityContainer();
        host.Container = unity;
        host.Container.AddNewExtension<Interception>(); ;
        host.Container.RegisterType<IDocumentTemplateService, 
            DocumentTemplateService>().Configure<Interception>().
        SetInterceptorFor<IDocumentTemplateService>(
            new TransparentProxyInterceptor());

        return host;
    }
}

여기서 내가 뭘 잘못하고 있니?

도움이 되었습니까?

해결책

WCF 동작을 사용하여 체크 아웃 할 수 있습니다. 유용한 링크가 있습니다.

http://msdn.microsoft.com/en-us/magazine/cc136759.aspx

그리고

http://www.global-webnet.net/blogengine/post/2009/01/03/integrating-iis-wcf-and-unity.aspx

-Bryan

다른 팁

나는 당신이 찾고있는 일을 정확히하는 것을 만들었습니다. CodePlex에 배치했습니다.
http://wcfaop.codeplex.com/

기본적으로 자신만의 인스턴스 제공자를 만들어 유니티 컨테이너에서 WCF 서비스 객체를 만들고 가로 채기를 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top