问题标签 [faultexception]

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 回答
1624 浏览

wcf - 如何在不中止整个事务的情况下处理 WCF 中的 FaultException?

我有一个 WCF 服务作为事务的一部分被调用。

如果服务被调用两次(通常在调试期间发生),我希望服务抛出一个 FaultException 但整个事务必须成功

由于我抛出一个 FaultException 事务将投票中止,对吗?

我正在考虑这样做(设置事务完成 - 然后抛出错误) - 但我什至不知道这是否可行。它也有一些我不想担心的并发症。

一个明显的解决方案是返回带有Success参数的消息 - 这是我最初所做的 - 但这是一个糟糕的设计,因为最终它是一个错误并且应该有一个例外。

或者解决方案是否像让我的客户捕获故障并继续交易一样简单。我担心投票已经通过。

允许 WCF 服务抛出错误但仍允许事务成功的最佳方法是什么?

0 投票
1 回答
5213 浏览

.net - 自定义异常作为故障异常中的详细信息

我试图从我的 WCF 服务中将我自己的自定义异常抛出到 FaultException 中,并在我的 WCF 客户端中捕获它。但是,在客户端,异常被捕获为非通用 FaultException,并且我的自定义异常的详细信息丢失了。

我的自定义例外是:

这是我扔它的方法:

(请注意,我确实在界面中的方法上放置了 [FaultContract(typeof(MyCustomException))])

以下是我尝试在我的客户中捕捉它的方法:

我的目标是在上面的第一个 catch 子句中捕获异常,但它最终在第二个 catch 子句中被捕获。

奇怪的是,如果我将 MyCustomException 替换为 ApplicationException,那么 FaultException 确实会被正确捕获。

我猜问题是 MyCustomException 被序列化为可序列化(而不是通过 DataContractSerializer),并且可能我缺少一些对 WCF 的附加指令。ServiceKnownType 属性行中的内容?(虽然我试过了,但无济于事)。

0 投票
1 回答
1503 浏览

wcf - WebFaultException 传回 XML 消息而不是字符串?

在我的 RESTful 服务层中,任何出现的异常都会被捕获为故障异常。在该 FaultException 中,有一条自定义 XML 消息包含<errorNumber>,<errorCode>和一个<message>. 我将异常重新打包为 WebFaultException,以便可以将响应标头的 HttpStatusCode 设置为 400、401、404 等。

但是,我不想使用WebFaultException<string>(string message, HttpStatusCode code). 我希望消息也是 XML 消息。

有人看过如何设置响应消息的 HttpStatusCode 并设置 XML 消息吗?我正在使用 Fiddler 检查我的响应标头和来自服务的任何消息。

0 投票
1 回答
2744 浏览

wcf - wcf异常处理抛出错误

嗨,我在 wcf 中处理异常时遇到问题。我有这样的服务:

我在 WCFTestClient 实用程序中的服务上调用 SavePerson()。SavePerson() 实现是:

但我得到这个错误:

调用服务失败。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来恢复。

如果我更改 SavePerson 方法而不是:

我愿意

我没有收到上述错误,但我只收到异常消息,没有内部异常。我究竟做错了什么?

0 投票
5 回答
4485 浏览

wcf - FaultException.Detail 返回为空

我试图在 WCF 客户端上捕获给定的 FaultException。我基本上需要从故障类中提取一个内部描述,以便我可以将它打包到另一个异常中,以便上层执行任何操作。

我已经成功完成了很多次,这次的不同之处在于,fault 被声明为一个数组,正如您从在引发异常的方法之上声明的服务引用属性中看到的那样:

这是我的代码:

问题是细节(它是一个数组)总是在代码中返回空,即使我可以在 WCF 跟踪的 SOAP 响应中看到数据(描述字段等)。

所以我需要的东西肯定会回来,但由于某种原因,它要么没有被反序列化,要么我无法从代码中得到它。

任何帮助表示赞赏!

更新

尝试@Darin 建议但没有运气,我从 XmlReader 中提取的字符串是“/r/n”:

看起来细节部分根本没有出现!

0 投票
2 回答
5986 浏览

c# - wcf 客户端代理的 Abort() 方法在捕获 FaultException 后不释放会话

我创建了一个托管在 IIS 和 wcf 客户端中的简单 wcf 服务,并发现当你从 wcf 服务中捕获一个 FaultException 然后调用 client.Abort() 来释放会话(如微软示例所说)它不会释放会议并在第 11 次通话时挂断。

这是示例:

Wcf 服务:

客户:

}

但是,如果您将 client.Abort() 替换为 client.Close() 以获得 catch(FaultException ),那么一切都会像魅力一样工作,并且在第 11 次调用 wcf-service 方法后没有锁定。

为什么会这样?为什么在捕获 FaultException 后 Abort() 方法不清理会话?

0 投票
2 回答
1855 浏览

c# - 如果登录不正确,如何使 C# WCF 会话无效

我正在使用 WCF 为应用程序编写远程服务,其中登录信息保存在数据库中。该服务需要通过登录或帐户创建调用建立会话。不涉及 ASP。

现在,当客户端通过调用公开的IsInitiating方法启动会话时,我会根据数据库上的信息检查提供的帐户数据,如果不正确,我想使该会话无效并强制客户端重新启动调用IsInitiating方法。

查看其他一些 问题,我发现了两种使会话无效的方法的优缺点。一种方法是通过抛出一个 FaultException 来实现这一点;另一个以更温和的方式存储接受的会话 ID。

现在,第一个虽然实现了我的愿望,但过于激进,因为不正确的登录是应用程序正常流程的一部分。另一方面,第二个允许客户端继续调用非启动方法,即使它们将被拒绝,同时由于增加了线程安全要求,也会在服务上产生相当大的代码开销。

所以,问题是:是否有第三条路径允许服务使会话初始化无效并将其传达给客户端,因此它被迫进行新的IsInitiating调用?

我拥有的代码的简化版本:

0 投票
1 回答
3795 浏览

wcf - 没有发送 StackTrace 的 WCF FaultException

我有一些具有预定义FaultContract属性的 WCF 服务。当FaultException<TDetail>抛出异常时,它们会发送 StackTrace、Source 和其他可能未保存的信息。

是否可以只退货:

  • 详细信息(来自通用 TDetail)
  • 故障信息
  • 故障码
  • (并且可能)故障原因
0 投票
2 回答
4949 浏览

c# - 单元测试 WCF 错误

对 WCF 服务的预期故障进行单元测试的最佳方法是什么?

我正在尝试对 WCF 服务进行单元测试,该服务(正确地)为某个可重现的错误抛出 FaultExceptions。单元测试获取 WCF 客户端的实例并调用适用的服务方法,这会引发 FaultException。

所有这些都可以按您的预期工作,但是我很难对此进行单元测试,因为当错误未在服务实现中捕获时,错误会导致 IDE 中断。因为我使用的是错误而不是异常,所以我希望 IDE 序列化异常并将其发送到客户端,在那里它会引发异常。

我确实看到有一个配置选项可以为特定的用户未处理的异常禁用中断,但我希望有人能指出一种更好的方法来实现相同的结果,因为这在团队环境中并不容易实现。

这是当前实现的一些示例代码...

单元测试项目有一个对我的 WCF 服务的服务引用,我已经将接口定义为:

故障定义如下:

调用服务的代码大致如下:

  • 我编辑了代码以显示我正在使用 ExpectedException 属性,并且当服务中引发异常时,它似乎对保持 IDE/调试器不会中断有太大影响。
0 投票
3 回答
2767 浏览

wcf - WCF/WebService:可互操作的异常处理

我知道 WCF 会将异常转换为错误并将其作为 SOAP 消息发送回来,但我想知道这是否真的可以互操作。我想我很难弄清楚这种可能的情况:

  1. 客户端 (Java) 调用 WCF 服务 (LoginService)。
  2. 服务器检查授权是否正确,用户授权失败。
  3. 服务器抛出 UnauthorizedAccessException。
  4. WCF 以某种方式将其转换为故障。(* - 也见下文)
  5. 客户端必须能够知道如何读取此故障。

我想我只是很难理解这如何仍然是可互操作的,因为它期望 Java 知道如何翻译 .NET 从 UnauthorizedAccessException 编码的 SOAP 错误。

  • 此外,.NET 如何实际将异常转换为故障,故障代码、名称等内容。有些事情似乎是“duh”,比如故障名称可能是“UnauthorizedAccessException”,但我宁可确定也不要猜测。