Tag: ierrorhandler

如何使用Castle Windsor将对象注入到WCF IErrorHandler实现中?

我正在使用WCF开发一组服务。 该应用程序正在使用Castle Windsor进行dependency injection。 我添加了一个通过属性添加到服务的IErrorHandler实现。 到目前为止一切都在发挥作用。 IErrorHandler对象(名为FaultHandler的类)正在被正确应用并被调用。 现在我正在添加日志记录。 Castle Windsor设置为注入记录器对象( IOurLogger一个实例)。 这很有效。 但是当我尝试将它添加到FaultHandler我的记录器为空。 FaultHandler的代码如下所示: class FaultHandler : IErrorHandler { public IOurLogger logger { get; set; } public bool HandleError(Exception error) { logger.Write(“Exception type {0}. Message: {1}”, error.GetType(), error.Message); // Let WCF handle things its way. We only want to log. return false; } public void […]

当HTTP状态代码为401 Unauthorized时,IErrorHandler返回错误的消息体

我已经实现了IErrorHandler来处理在我的restful WCF服务的构造函数中抛出的授权exception。 捕获常规exception时,将按预期返回自定义类型,但ContentType标头不正确。 HTTP/1.1 500 Internal Server Error Content-Type: application/xml; … {“ErrorMessage”:”Error!”} 但是,当error handling程序尝试返回401 Unauthorized http状态代码时,消息正文将被覆盖为默认类型,但ContentType标头应该是应该的。 HTTP/1.1 401 Unauthorized Content-Type: application/json; … {“Message”:”Authentication failed.”,”StackTrace”:null,”ExceptionType”:”System.InvalidOperationException”} 显然这里有些不对劲,但我不确定是什么。 如何实现IErrorHandler,使其在json中使用正确的标头返回我的自定义类型? BaseDataResponseContract对象: [Serializable] [DataContract( Name = “BaseDataResponseContract” )] public class BaseDataResponseContract { [DataMember] public string ErrorMessage { get; set; } } // end 这是我想要返回的对象。 我的应用程序中的所有其他对象都inheritance自此对象。 当抛出exception时,我们真正关心的是http状态代码和错误消息。 IErrorHandler实现(为简洁起见,未显示日志记录): namespace WebServices.BehaviorsAndInspectors { […]