参考此界面:https://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler(v=vs.110).aspx
我编写了实现IErrorHandler的编码类,并且它没有触发(尽管使用调试器我看到了Validate,AddBindingParameters,ApplyClientBehavior等方法,但没有看到ApplyDispatchBehavior运行。
我以前编写的示例是作为Web服务发布的BizTalk业务流程(https://blog.tallan.com/2014/09/29/wcf-webhttp-and-custom-json-error-messages/comment-page-1/#comment-232591);但在我的情况下,我是一个BizTalk业务流程调用外部Web服务(我是客户端,而不是服务器)。我想陷阱并改变400状态。
因此,在他的代码示例中,他将ErrorHandler添加到ApplyDispatcherBehavior中的endpointDispatcher.ChannelDispatcher。在做了一些阅读之后,看起来像ApplyDispatchBehavior只有当你是服务器时。我可以添加错误行为"来发送"在ApplyClientBehavior中?
.tox
我希望WCF专业人士与BizTalk人员能够真正回答。 BizTalk有一个WCF适配器(在这种情况下充当WCF客户端),我们有办法在该结构中实现自定义行为。我也在使用AfterReceiveReply方法;但我认为BizTalk在运行该方法之前就停止了适配器。我希望IErrorHandler可以允许我进行拦截。
我有AfterReceiveReply的逻辑;但它没有运行(虽然是BeforeSendRequest)。我认为BizTalk适配器正在调用该消息,因为HTTP状态不好而且不让我检查它。
我的相关帖子用BizTalk术语编写:How to prevent BizTalk 2013/R2 WCF-WebHttp Rest SendPort from Suspending on Http Status=400