问题标签 [wcf-faults]

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 投票
2 回答
1751 浏览

wcf - WCF 验证错误

我正在使用验证应用程序块 - 企业库来验证发送到我的 WCF 服务操作的参数。例如,某个操作要求参数为 1 或 6,如下所示:

这工作得很好,即发生验证错误,但是当客户端调用服务时,会抛出通用 System.ServiceModel.FaultException。一条消息表明:“此故障的创建者未指定原因。”

现在,我可以在服务校准之前自己检查参数并引发自定义错误,但这似乎违背了使用验证应用程序块对参数进行基于属性的验证的目的。是否有自定义验证错误返回的错误?我也有可能做错了什么。我只想让调用者知道他/她应该在异常消息中传入 1 或 6。这可能吗?

0 投票
1 回答
2698 浏览

wcf - WCF 获取“必须加密主签名”。来自具有 ProtectionLevel.None 的 FaultContract

我有一个现有的 asp.net 应用程序,它与负载平衡的 wcf 服务(iis 托管,在配置为 servicePrincipalName 的帐户下运行的应用程序池等)对话。wcf 服务返回一些自定义错误,全部使用 FaultContract(typeof(x), ProtectionLevel = ProtectionLevel.None) 定义——这些服务不向公众公开。客户端使用“服务引用”生成的类来访问服务。

这工作正常,但现在,使用最新的代码库,我们得到“必须加密主签名”。当服务返回这些故障之一时,客户端上的异常。服务代码和配置没有改变(至少是产生故障的遗留部分)。客户端服务参考生成的代码似乎变化最大(它经常被删除并重新创建)。

安全配置一年多没有变化。所有更新都是最新的。我们已经在三个环境中对此进行了测试,一旦我们部署了新的代码库,错误就会开始产生异常。似乎它必须在生成的类中,但它们是由 Visual Studio 生成的,因此非常令人困惑。

这听起来很熟悉吗?有什么建议么?

更新:删除 ProtectionLevel 属性并允许它默认会使问题“消失”,但我很好奇为什么指定 None 会导致它失败。也许它与运营合同或服务合同的默认级别冲突,但这些值在过去一年中没有改变,所以这并不能解释为什么现在有效的东西没有改变。

更新:对于它的价值,代码生成的这种变化发生在 2.0.50727.3053 和 2.0.50727.3082 之间(根据生成代码中的运行时版本注释)。

0 投票
1 回答
546 浏览

wcf - 有人真的使用 FaultReasonText 来定位 WCF 服务的故障吗?

WCF 中有一种本地化机制,可以通过作为故障一部分的 FaultReasonText 对象本地化返回给客户端的故障。

这样做的方法是在 FaultReasonText 的集合中传递故障消息的所有可能翻译。据我所知,这基于 SOAP v1.2。

有人真的使用这种机制吗?就带宽而言,这不是浪费吗?为什么要将所有可能的翻译发送给(可能)只对特定语言感兴趣的客户?

0 投票
2 回答
7279 浏览

c# - 如何跟踪 WCF 序列化问题/异常

我偶尔会遇到在 WCF 序列化期间抛出应用程序异常的问题(在从我的 OperationContract 返回 DataContract 之后)。我得到的唯一(而且意义不大)的信息是

System.ServiceModel.CommunicationException :基础连接已关闭:连接意外关闭。

对内部异常没有任何了解,这使得在序列化过程中很难找出导致错误的原因。

有人知道如何跟踪、记录和调试这些异常的好方法吗?或者更好的是我可以捕获异常,处理它们并将定义的 FaulMessage 发送到客户端吗?

谢谢你

0 投票
2 回答
4949 浏览

c# - 单元测试 WCF 错误

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

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

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

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

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

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

故障定义如下:

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

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

c# - WCF 错误处理

Q如何在客户端获取原始异常(发生在服务器上)?

我正在使用自托管的 WCF 服务和 C# 4 并尝试设置正确的异常处理。

我有一个看起来像这样的客户

及服务实施

服务 web.config 有

这是我原来的例外 在此处输入图像描述

这就是我在客户端上得到的在此处输入图像描述

如果需要,我可以在客户端发布完整的详细信息,但是客户端上的异常没有对原始异常的任何引用。

更新
这是我定义的FaultContractAttribute接口

这是我的WcfException

0 投票
1 回答
2864 浏览

c# - 传输字节 [] 时 WCF 数据服务中的异常

我正在测试我设置的最近的 WCF 数据服务。

大多数事情都很好,只有一个集合,当我添加一个对象并保存更改时,我得到了这个异常:

它是唯一包含文件( byte[] )的对象,所以我认为问题在于这个文件(大小?...?)即使我激活了详细信息,错误也不会告诉我很多故障:

我拥有此收藏的所有权利:

这是我添加文件的方法:

我试图添加

我的元素

如果我发送一个空的 txt 文件,它可以工作。

任何的想法?

谢谢!

0 投票
1 回答
1488 浏览

wcf - 为什么企业库不会在 WCF 中抛出 FaultException

我使用托管在 IIS 上的 WCF 服务。
此外,我使用故障合同将错误发送到客户端(FaultException<'T>
在客户端,我捕获FaultException<'T>以向用户显示一些错误。
如果在服务器上抛出了一些未处理的异常,WCF 会生成普通的FaultException,因此客户端会捕获它并显示用户“内部服务器错误”消息。

然后我开始使用 Enterprise Library 5.0 for WCF Exception Shielding,遇到了以下问题。使用FaultContractExceptionHandler可以将所有错误传递给客户端,但如果出现未处理的异常,客户端会收到CommunicationException而不是FaultException。其他一切正常。

如果我关闭异常处理策略(删除 ExceptionShielding 属性),客户端会按预期捕获FaultExceptions 。
你知道可能是什么原因吗?
谢谢。

PS:这是一个内部异常链:
CommunicationException -> WebException -> IOException -> SocketException
消息是“底层连接已关闭:预期保持活动的连接已被服务器关闭。”

网页配置

服务等级

运营合同

0 投票
1 回答
346 浏览

wcf - 在客户端记录 WCF 错误

我的应用程序使用 WCF 调用 Web 服务。调用可能因各种原因而失败:

  • 过错
  • 暂停
  • 连接丢失
  • ...

我想记录所有此类错误。我不想将每个调用都包装在 try-catch 中,而是想在一个地方为整个应用程序中的所有 Web 服务调用执行此操作。

不幸的是,IClientMessageInspector 不会因超时和连接失败而被调用。是否有可用于集中记录所有异常的 WCF 扩展点?

请注意,我不只是想将错误记录为 WCF Tracing 之类的文本。我想记录:

  • 服务名称
  • 方法名
  • 期间
  • 异常.ToString()

我愿意接受解决方法。

0 投票
2 回答
1063 浏览

wcf - 管理/修改反序列化错误/拦截响应

假设我有以下请求对象:

和一个 WCF 服务定义如下:

如果我将以下内容发送到操作,我会得到所需的响应:

如果我发送无效的 Guid(任何类型都会发生这种情况),我会收到以下响应:

考虑到我的服务确切地知道数据出了什么问题,这一切都很好,但对我的消费者来说信息还不够。

我可以使用 web 配置设置公开完整的异常<serviceDebug includeExceptionDetailInFaults="true"/>,但这对我的消费者来说信息太多了!我宁愿在代码级别自定义错误,但我不确定如何附加到反序列化器?我知道如何处理自定义 SOAP 错误和 FaultContract,但这似乎处于较低级别 - 我需要在传入消息到达 CLR 方法之前拦截它,不知何故?有没有办法做到这一点,我不知道?