问题标签 [ierrorhandler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
993 浏览

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

我正在使用 WCF 开发一组服务。该应用程序正在使用 Castle Windsor 进行依赖注入。我添加了一个IErrorHandler通过属性添加到服务的实现。到目前为止一切正常。IErrorHandler(被调用的类的对象FaultHandler被正确应用和调用。

现在我正在添加日志记录。Castle Windsor 设置为注入记录器对象(的实例IOurLogger)。这是有效的。但是当我尝试将它添加到FaultHandler我的记录器时是空的。

的代码FaultHandler看起来像这样:

这会引发它自己的异常,因为调用logger时为空HandleError()

记录器已成功注入服务本身并可以在那里使用,但由于某种原因,我无法在FaultHandler.

更新:这是温莎配置文件的相关部分(编辑以保护无辜者):

0 投票
3 回答
3718 浏览

wcf - 没有错误契约的 WCF 错误处理

我有一个 WCF 服务,它的所有操作返回类型都是 OperationStatus:

我想创建一个 ErrorHandler 来捕获所有异常,然后我希望它返回到 ServiceReponse 类的客户端实例,其中属性 Success 设置为 false,StatusReason 设置为“INTERNAL SERROR”。

至于现在,我有自己的类实现 IErrorHandler,但我不想使用 FaultContract - 我只想返回 StatusReason 类型的客户端常规对象。这可以做到吗?

0 投票
1 回答
1029 浏览

wcf - 使用 Message Inspector 实现“Ping”功能会导致 WCF 运行时抛出 NullReferenceException

我正在使用 WCF 来实现 Web 服务。此 Web 服务需要“ping”功能作为每个服务的运行状况监视器。此功能已使用 IDispatchMessageInspector 实现,并针对服务的每个端点进行了配置。这是由于业务要求“ping”尽可能接近实际服务代码。同时,我不想将它绑定到每个服务实现的代码,而 IDispatchMessageInspector 似乎很合适。

该服务使用请求-回复 MEP。每个请求消息都包含一个元素,该元素指定需要进行哪些处理。然后服务将使用此值来确定如何处理消息中的数据。相同的元素用于将请求消息定义为“心跳”检查。

“ping”消息检查器将在 AfterReceiveRequest() 方法中预处理请求消息,如果它确定请求是“心跳”,它将生成正确的响应并通过 a 将其传递给 BeforeSendReply() 方法从 AfterReceiveRequest() 返回的相关对象。AfterReceiveRequest()的请求消息参数,通过引用,然后设置为null,以防止消息被服务实现代码处理。

在我不记得也找不到 URL 的网站或博客中发现了将请求消息设置为 null 的技术。这种技术本身就很有效,如果它是一个“心跳”请求,我可以阻止服务实现代码被执行。

不幸的是,在消息检查器中将请求消息设置为 null 将导致 WCF 运行时始终抛出 NullReferenceException。从堆栈跟踪中,我收集运行时仍会将消息对象(通过“Ping”消息检查器后将为空)传递给调度程序,并且当调度程序尝试反序列化空消息对象时,会导致 NullReferenceException。

但是,我的系统还实现了 IErrorHandler 来捕获服务中任何未处理的异常并记录它。这意味着每个成功的“心跳”请求都会为 NullReferenceException 生成一个日志条目,并且“心跳”可能会像每分钟一样频繁。

问题:

当“Ping”通过将请求设置为空来阻止服务实现代码运行时,我能做些什么来防止记录“无用”NullReferenceException。

提前谢谢了。
〜汞

0 投票
2 回答
12767 浏览

wcf - IErrorHandler 似乎没有处理我在 WCF 中的错误 .. 有什么想法吗?

一直在阅读 IErrorHandler 并想走配置路线。因此,我已阅读以下内容以尝试实施它。

MSDN

Keyvan Nayyeri 关于类型定义的博客

罗里报春花博客

这基本上只是封装在一个继承 IErrorHandler 和 IServiceBehaviour 的类中的 msdn 示例......然后它被封装在从 BehaviourExtensionElement 继承的 Extension 元素中,据称允许我将该元素添加到 web.config 中。我错过了什么?

我已经编译好了,从我修复的各种错误来看,WCF 似乎实际上正在加载错误处理程序。我的问题是我要在错误处理程序中处理的异常没有得到传递给它的异常。

我的服务实现只是调用另一个引发 ArgumentOutOfRangeException 的类的方法——但是这个异常永远不会被处理程序处理。

我的 web.config

服务合约

错误处理程序类

和行为扩展元素

0 投票
1 回答
3355 浏览

.net - 在 WCF 中使用类级别属性实现 IErrorHandler

通过配置文件让它工作没有运气,所以决定尝试通过类级别属性走更健壮的路线。如果我可以让它工作,那么它显然是一种在服务层的故障中包装异常的好方法,而无需重复大量代码。

然而,属性中的代码似乎永远不会运行 - 尽管定义属性的代码编译得很好并且被 IDE 识别。关于解决这个问题,我已经没有什么要读的了 - 只是要处理的异常就会被抛出。

我还借用并删除了在 r​​orys 网站上的 CodePlex 上找到的一段代码,以在不改变其功能的情况下简化此问题(删除了冗余重载)

这让我发疯......请帮忙!:D

Rory Primrose - 属性实现

Rory Primrose - IErrorHandlerImplementation

编码:

服务接口和实现

KnownErrorHandler 实现:

属性定义——怀疑问题出在这里。我相当确定这与我使用这段代码的方式有关。

0 投票
2 回答
1347 浏览

wcf - WCF 中的自定义 JSON IErrorHandler 在应返回 400 时返回 StatusCode 200/504

我有一个 WCF 服务,除了其他绑定之外,它还使用 WebHttpBinding 来处理 JSON 输入/结果。

我做了一个自定义的 IErrorHandler 实现,以便能够在出现问题时将 StatusCode 设置为 400 并返回 JSON 可理解的消息。这是随处可见的直接实现(这里描述的好方法)。

我的问题是:当我使用 Visual Studio Web Development Server (Cassini) 在本地测试它时,它运行良好。但是,当我将它部署到我的测试服务器(具有 IIS 标准配置的 Windows 2008 和其他一切)时,它不起作用。

当我调用它并使用 Firebug 进行调试时,我得到一个 HttpStatusCode 200 作为返回并且没有响应文本。使用 Fiddler,我得到一个 HttpStatusCode 504 并且根本没有回报。但是,我期望的行为(以及本地发生的情况)是调用带有 responseText 集的 ajax 调用的错误回调。

我远程调试了它,一切看起来都很好。执行管道正常,所有类都被调用,因为它们应该就像它们在本地一样,但它不起作用。

有什么建议么?我几乎没有办法解决这个问题。

非常感谢!

0 投票
1 回答
601 浏览

wcf - MSMQ 通过 WCF 吞下格式错误的消息,没有错误,没有警告

我有一个使用 WCF 响应 MSMQ 上的消息的服务。当消息格式正确时,它可以正常工作,我们很高兴。当消息用于不同的服务并且操作不同时,消息将保留在队列中,我们获取日志条目,我们修复,我们很高兴。

但是,当消息具有正确的操作,但包含服务器无法反序列化的 XML 元素时,消息将从队列中消失,我们不会获得日志条目,并且我们几乎不知道发生了什么。我们不开心。

我试过添加一个 IErrorHandler。我试过添加一个故障事件处理程序。我唯一能做的就是使用 WCF 中内置的诊断日志记录。有什么方法可以使用我自己的记录器或错误处理程序来响应代码中的此类错误?

我的队列恰好是事务性的,但这似乎与这个问题没有任何区别。这发生在 Windows Server 2003 上的 MSMQ 3.0 版上。

此源代码显示了问题:

0 投票
1 回答
1099 浏览

wcf - WCF IErrorHandler.ProvideFault() 行为

我的服务方法标有,PrincipalPermissionAttribute并且我有一个IErrorHandler附加到服务的自定义实现。当传入的请求没有执行该方法System.Security.SecurityException的权限时,将抛出该方法。IErrorHandler.ProvideFault()然后触发,我想提供一个特殊的故障。但是error参数不是原始异常,它是 untyped FaultException。此外,error.InnerException尽管我在配置中有以下设置,但仍为 null:

为什么?我怎样才能达到预期的行为?

0 投票
2 回答
1260 浏览

wcf - 在有故障的 WCF 通道上调用 Abort 会导致记录服务器端错误

当从我的 WCF 服务返回 FaultException 时,我需要中止通道而不是关闭它。我的客户端和服务都可以使用这种方法正常工作,但是在服务上实现 IErrorHandler 并记录任何异常之后,我可以看到在客户端上调用 Abort 会导致服务记录:

System.ServiceModel.CommunicationException:套接字连接被中止...

我不想用这些信息污染我的服务日志,只想记录与服务相关的错误。我知道我显然可以停止记录任何 CommunicationExceptions,但我的服务也是其他服务的 WCF 客户端,并且应该记录这些服务引发的 CommunicationExceptions。

我怎样才能阻止它这样做?

0 投票
2 回答
2093 浏览

wcf - WCF、IErrorHandler 和 log4Net

我正在尝试在将使用 log4net 记录异常的 wcf 服务上实现错误处理行为

然后我实现一个使用该行为的服务。如果我在服务中声明 ILog 变量,这可以正常工作

但是,当未声明 ILog 变量时,日志记录将停止工作。

理想情况下,我不想在我生成的每个服务中都声明 ILog 变量,尤其是当它已经在行为中声明时。

有人可以解释一下a)为什么必须在行为和服务中声明这一点。b) 避免双重声明的任何方式或 c) 登录 wcf 的更好方式。