问题标签 [faultcontract]

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 投票
1 回答
1028 浏览

wcf - 为传出的 FaultException 向 SOAP 信封标头写入数据协定?

我对当前的项目有点担心。我们有一个拒绝遵守合同的集成合作伙伴,他们期望一个带有自定义标头的错误合同,而不是包含相同标头和合同有效消息正文的 WSDL 定义的消息合同。使用 WCF 发送 SOAP 错误不是问题,因为可以简单地抛出FaultException. 真正的绑定是要求故障包含自定义标头。我能够使用 来序列化自定义标头OperationContext,但是它不会按照我们的集成合作伙伴要求的方式进行序列化。

使用OperationContext.Current.OutgoingMessageHeaders,可以创建MessageHeader<T>包含您希望包含在标头中的对象的自定义...它可以是 POCO、DataContract 或 MessageContract。当使用消息契约时,命名空间似乎被忽略了,序列化的消息在消息的每个成员上都有一堆无效的 xmlns= 属性,这也是一个问题。创建 MessageHeader 后,调用该.GetUntypedHeader(name, namespace)方法将生成一个MessageHeader可以添加到 OperationContext 的 OutgoingMessageHeaders 中。问题是您不能直接将对象添加到标头...它们显然必须始终被包装,因为 GetUntypedHeader 方法需要包装器元素名称和命名空间。

所需的标头如下:

如果不是因为标题 ,imsx_syncResponsHeaderInfo具有三个子元素,我们可能会做生意。但是,不可能直接创建包装三个单独对象的消息头,并且IsWrapped=false当使用imsx_syncResponseHeaderInfo带有xmlns服务合同)。根据合同模式,这会使标头无效,并且消费者无法反序列化它。

是否有某种方法可以将 MessageContract 添加到 WCF 传递的 SOAP 错误的传出消息标头中,而不需要对其进行包装,并且这样子元素就不会被序列化,每个子元素都具有自己的包含服务 TNS 的 xmlns 属性合同?

0 投票
2 回答
4731 浏览

wcf - System.Exception.Data will not serialise on DataContract?

I have some WCF services using dataContracts and i wanted to I was hoping to pass a Exception with custom Dictionary< string , object > data in the Data property, but when i add any data on this array before throwing i get the following error in the ErrorHandler of my custom ServiceBehavior:

with data contract name 'ArrayOfKeyValueOfanyTypeanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.

Do i invariably need to create a custom exception with a Dictionary property annotated as a DataContract and throw that? the idea of using the ErrorHandler is avoiding to handle exceptions in each service method, do i still need to add further annotations to the methods? what i am missing?

for reference, this is my FaultErrorHandler class:

my typical service interface looks like:

0 投票
1 回答
7408 浏览

c# - 客户端不会捕获泛型 FaultException<T>,只会捕获 FaultException

我已经阅读了所有要阅读的内容,但也许我错过了一些东西(好吧,我肯定错过了一些东西,否则它已经可以工作了)

我在服务器业务层中抛出了一些异常错误:

我在服务中未处理,但我有一个IErrorHandler要捕获并创建一个FaultMessage

不用问;我已经用调试器确认它进入了零件if (error is RfcException)部分,我已经逐步完成了该代码,并且它一直到最后没有任何问题。那个errorHandler包装了一条FaultException<RfcServiceFault>消息,RfcServiceFault消息就是这个

该服务具有应具有带有 faultContract 的 wcf 服务的所有注释:

现在:在客户端进行测试,像这样的简单测试:

我已经阅读了很多很多关于这个类似问题的帖子:

但到目前为止似乎没有任何帮助,我尝试在 web.config 中设置 WCF 跟踪:

我在那里得到一个 svclog 文件,我用 WCF Trace 查看器打开,但我只看到一堆消息,黄色的显示异常,但它只确认客户端已经看到的内容,System.ServiceModel.FaultException正在接收,而不是通用的

任何想法如何解决这个问题?

编辑忘了提,我在配置中启用了我的错误处理程序,如下所示:

0 投票
1 回答
620 浏览

c# - 专门的 FaultException 子类或 FaultException

我希望我的 WCF 服务能够返回一些已知错误。即定义的FaultContract

对于我应该派生自己的FaultException子类,还是创建一个详细类并使用FaultException<TDetail>.

似乎有两个分散的例子,我只是想知道普遍的共识是什么。

我倾向于派生,因为我认为客户端代码看起来更清晰,MyException而不是以 WCF 为中心FaultException<MyExceptionDetail>,但我对此并没有任何强烈的感觉。

0 投票
0 回答
338 浏览

c# - 企业库异常块,System.Exception 类型处理程序覆盖其他异常类型处理程序

我正在使用企业库异常处理块。

我有以下问题:

我想要一个具有两种异常类型(optimisticconcurencyexceptionsystem.exceptions)的策略。对于optimisticconcurencyexception我添加一个故障处理程序。我system.exceptions添加了一个不同的故障处理程序和一个日志处理程序。

现在,如果我optimisticconcurencyexception 发现库将执行system.exceptions故障处理程序和日志处理程序,而不仅仅是我分配的故障处理程序optimisticconcurencyexception

我在调试器中设置了一个断点,异常管理器在其中处理抛出的方法optimisticconcurencyexception,并且在代码中,我得到了正确的faultexception

我可以理解吗?对这个问题有什么想法吗?

编辑

我的问题是在企业图书馆支持论坛上回答的。

这是一个链接 http://entlib.codeplex.com/discussions/349033

0 投票
1 回答
425 浏览

c# - svcutil.exe 客户端代理和故障合约

我的 svcutil.exe 生成的客户端 c# 代理代码中是否可以包含故障合同信息?
我的意思是,如果一个 Web 服务方法被标记为FaultContractAttribute,我希望在客户端代理方法的注释中提到它的类型参数,这样当我使用它时,我可以看到必须捕获哪些异常。
谢谢你。

0 投票
2 回答
829 浏览

wcf - 使用 WCF 和业务逻辑层方案处理异常

我的服务只是调用放置整个业务逻辑的 BusinessLogicLayer 方法。我想知道处理 BL 引发的异常的最佳做法是什么?(不仅是致命异常,还有“逻辑”ApplicationExceptions,如我的 BL 在找不到用户时抛出的 UserNotFoundException)。

我应该在哪里将这些异常转换为客户将看到的 FaultExceptions?

我应该从 BL 抛出我的业务异常,然后将它们捕获到服务调用中并转换为 FaultException 并返回给客户端吗?或者 BL 应该引发已经“客户友好”的 FaultExceptions?

提前致谢 :)

0 投票
1 回答
1168 浏览

wcf - 使用 Castle Dynamic Proxy Generation 注入 WCF 故障合约

我目前正在使用 WCF 后端开发 WPF 应用程序。我们已经为异常处理实现了一个客户端日志解决方案和一个服务器日志解决方案,它们工作得很好,但通常很难通过网络将信息联系在一起。如果服务器上发生异常,我想要一种通过网络将异常令牌传回的方法,以便我可以将异常记录到客户端上。这样,当我解决客户端错误时,我可以很容易地将它与服务器异常关联起来。

我想提供更多关于我们的架构的信息,然后我会陈述我的问题。

我们的 WCF 实现比用于设置服务引用的开箱即用方法更健壮一些。我们在客户端实现了动态代理生成。我们通过创建客户端和服务器共享的 Web 服务接口来实现这一点,并使用 Castle.DynamicProxy.ProxyGenerator 类和 CreateInterfaceProxyWithoutTarget 方法来创建代理。此外,当我们调用 CreateInterfaceProxyWithoutTarget 方法时,我们指定了一个 IInterceptor 实现。在服务器上,有三个主要类用于我们的跟踪和故障行为:

FaultOperationInvoker(实现 IOperationInvoker):尝试使用 IOperationInvoker.Invoke 调用服务方法。如果是错误异常类型,则重新抛出,如果是异常,则尝试确定是否存在具有特定详细信息类型的错误合同,如果是,则包装然后使用详细信息引发新的错误异常。

FaultOperationBehavior (Implements IOperationBehavior) 将调度操作调用程序指向上述故障操作调用程序。

ExceptionTraceBehavior(继承属性,实现IServiceBehavior)用于处理实现IServiceBehavior的异常。我们还有一个类(FaultOperationBehavior)

我们的每一个服务接口都有一个具体的实现。我们所有的服务也继承了我们的基础服务类,该类用 ExceptionTrace 属性装饰。

所以,现在有了背景信息,问题就来了。我希望每个服务操作都有一个详细类型为 WCFServiceFaultDetail 的故障合同,但我不想在每个服务操作上都添加一个 FaultContract 属性。正如您在 ExceptionTraceBehavior 中看到的那样,我想出了如何以编程方式添加故障协定,并且它非常适合将故障添加到操作中。当在操作调用程序中捕获到一个常规的旧异常时,它会发现存在正确的故障契约并抛出一个新的 FaultExcption。但是,当异常被客户端捕获回来时,它会落入 catch (FaultExcection fe) 代码,而不是 catch (FaultException fe) 代码。

但是,如果删除以编程方式添加到故障合同中的代码,我会用 [FaultContract(typeof(WcfServiceFaultDetail))] 装饰每个服务操作,客户端会按预期捕获异常。

我唯一能想到的是,由于代理是从接口而不是从 WSDL 或其他元数据动态生成的,并且接口上没有错误契约修饰,所以我的编程错误契约没有得到兑现。

考虑到这一点,我试图弄清楚如何在 IInterceptor 实现中添加故障契约,但没有成功。

所以我希望有人已经这样做了并且可以提供一些细节。任何帮助表示赞赏。

0 投票
5 回答
16581 浏览

c# - 从 WCF FaultException 响应中提取详细信息

我正在成功地与第三方肥皂服务合作。我添加了对自动生成类的肥皂网络服务的服务引用。

发生错误时,它会返回如下所示的肥皂响应:

我可以捕捉到错误但不能提取细节。我尝试了以下代码:

但是,由于详细节点不是对象,因此会出现以下错误:

这是第三方 API,所以我无法更改响应。

0 投票
1 回答
419 浏览

wcf - wcf 错误异常未抛出/被正确捕获

这是我得到的例外:

TestService.exe 中出现“System.ServiceModel.FaultException`1”类型的异常,但未在用户代码中处理

我尝试运行我的客户端,当我尝试执行以下操作时调试器被捕获

可能是什么问题呢。如果我需要提供更多信息,请告诉我。