سؤال

لدي خدمة 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

-بريان

نصائح أخرى

لقد قمت بإنشاء شيء يفعل بالضبط ما تبحث عنه. لقد وضعته على codeplex:
http://wcfaop.codeplex.com/

في الأساس ، يجب عليك إنشاء مثيل خاص بك والذي سيقوم بعد ذلك بإنشاء كائن خدمة WCF من حاوية الوحدة والسماح لك بالاعتراض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top