Frage

Ich habe einen WCF -Dienst, der in einem Unity -Container eingerichtet wird. Ich hatte beabsichtigt, diesen Container zu verwenden, um Methodenabhörungen durchzuführen. Das Problem ist, dass ich meinen Abfangfeuerer nicht zum Feuer bringen kann ...

Zuerst hier die Definition meines Interceptor -Attributs und -handlers:

[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;
        }
    }
}

In meinem Host habe ich versucht, es so zu konfigurieren, dass Abfangen ohne Erfolg verwendet werden ... Hilfe !!!!

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;
    }
}

Was mache ich hier falsch?

War es hilfreich?

Lösung

Möglicherweise möchten Sie sich mit WCF -Verhaltensweisen ansehen. Hier sind Links, die nützlich sein könnten.

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

UND

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

-Rryan

Andere Tipps

Ich habe etwas geschaffen, das genau das tut, wonach Sie suchen. Ich habe es auf Codeplex platziert:
http://wcfaop.codeplex.com/

Grundsätzlich müssen Sie Ihren eigenen Instanzprovider erstellen, der dann das WCF -Dienstobjekt aus einem Unity -Container erstellt und Ihnen das Abfangen ermöglichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top