您的位置:首页 > 其它

WCF全局异常 可记录服务器端全部异常信息

2013-10-09 11:51 323 查看
1、构建异常记录类

public class GlobalException : IErrorHandler
    {
        public bool HandleError(Exception error)
        {
            return true;
        }

        public void ProvideFault(Exception error, System.ServiceModel.Channels.MessageVersion version, ref System.ServiceModel.Channels.Message fault)
        {
            //服务器端能够获取到错误方法
            var ex = new FaultException(string.Format("Wcf错误接口方法{0}", error.TargetSite.Name));
            MessageFault mf = ex.CreateMessageFault();
            //fault = Message.CreateMessage(version, mf, ex.Action);
        }
    }


2、构建处理类

public class GlobalExceptionHandlerBehaviourAttribute : Attribute, IServiceBehavior
    {
        private Type _Type;

        public GlobalExceptionHandlerBehaviourAttribute(Type ExcepType)
        {
            this._Type = ExcepType;
        }

        public void AddBindingParameters(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
        {
            var Handle = (IErrorHandler)Activator.CreateInstance(_Type);
            foreach (ChannelDispatcherBase dispatcherBase in
                serviceHostBase.ChannelDispatchers)
            {
                var channelDispatcher = dispatcherBase as ChannelDispatcher;
                if (channelDispatcher != null)
                    channelDispatcher.ErrorHandlers.Add(Handle);
            }
        }

        public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
        {
            
        }
    }


3、在你的服务上加上这个标记

[GlobalExceptionHandlerBehaviour(typeof(GlobalException))]
    public class LoginService : ILoginContract
    {

        public string Login(string UserName, string UserPwd)
        {
            if (string.IsNullOrEmpty(UserPwd))
            {
                throw new Exception();
            }
            return UserName;
        }
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: