捕获通信异常而不是自定义故障异常 - WCF

2024-05-04

在服务器上我抛出这样的异常。

catch(SqlException exception)
{
  if (exception.Message.Contains("Custom error from stored proc"))
  {
    //Exception to be thrown when authentication fails.
    throw new FaultException<MyServiceFault>(new MyServiceFault { MessageText = exception.Message });
  }
}

在客户端我捕获了异常

catch(FaultException<MyServiceFault> faultException)
{

}

这是我的 MyServiceFault

[DataContract]
public class MyServiceFault  
{
  [DataMember]
  public string MessageText { get; set; }

  [DataMember]
  public Guid Id { get; set; }
}

问题是在客户端上,它不会进入 MyServiceFault catch 块,而是进入通信异常 catch 块并抛出此错误

System.ServiceModel.CommunicationException: The underlying connection was closed: The connection was closed unexpectedly. ---> System.Net.WebException

我还装饰了我的服务方法[FaultContract(typeof(MyServiceFault))]在我的服务实现的界面中。

在我的 web.config servicebehaviour 标签中包含<serviceDebug includeExceptionDetailInFaults="true" />

知道我哪里出错了。

这个问题发生在Windows 7上。是否有与之相关的原因?

重要更新
根据回答者的说法,服务器上任何未处理的异常都可能导致客户端抛出通信异常,并且它可能与您在服务器上抛出的自定义错误异常无关。因此,解决方案是在服务器上记录错误并查找导致此行为的错误。这是我发现并实现的一个非常有用的开源日志记录功能,在您的项目进入生产环境后它甚至会更有用。非常感谢各位的回答。

在 WCF 中记录异常的更好方法 https://stackoverflow.com/questions/2997076/elmah-exception-logging-without-having-httpcontext


通过将其包含在您的 app.config 中,将日志记录添加到您的 WCF 调用中。

<system.diagnostics>
  <trace autoflush="true" />
  <sources>
    <source name="System.ServiceModel" switchValue="Information, ActivityTracing">
      <listeners>
        <add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\LogPath\LogFile.svclog" />
      </listeners>
    </source>
  </sources>
</system.diagnostics>

(您可以对服务器和客户端执行此操作,显然指定不同的日志文件)

生成一些日志后,请查看异常或警告。我经常发现这会产生一些非常有用的信息,帮助我解决 WCF 问题。

要读取日志文件,您需要使用SvcTraceViewer.exe http://msdn.microsoft.com/en-us/library/ms732023.aspx。不幸的是,获得这个的唯一方法是对于一个小小的工具来说,这是一个有点大的下载。

还值得记住的是,WCF 在关闭时可以通过 CommunctionException,这是预期的行为。你不应该只是这样做using与客户端 WCF 通信通道。相反,您应该遵循这样的模式:

try{
    x.Close()
}
catch(Comms ex){
    x.Abort()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

捕获通信异常而不是自定义故障异常 - WCF 的相关文章

  • PowerShell Get-ChildItem 如何捕获异常

    我目前正在编写一个可视化错误 GUI 它可以在处理时捕获任何异常 并向用户提供 易于理解 的错误消息 但似乎我在使用时无法捕获任何异常Get ChildItemcmdlet 我是否必须使用与 try catch 不同的方法 这是 Power
  • 无法从 java 发送 48681 字节消息以保护 wcf 服务

    我必须使用相互身份验证从 java 调用安全的 WCF 服务 一切工作正常 除了我无法发送大小超过 48680 字节的消息 因此 48680 字节的消息已成功发送 但 48681 字节的消息未成功发送 并且 java 应用程序因读取超时异常
  • Android蓝牙权限问题

    首先 抱歉我的英语不好 我是西班牙人 并且是 Android 开发的新手 我正在开发一个简单的蓝牙文件发送器 我基于BluetoothChat android示例一步一步 现在我向用户发出蓝牙激活请求 并选择是或否选项应用程序崩溃 我拥有清
  • 可以让 ReSharper 在 Intellisense 中显示异常吗?

    我很喜欢 ReSharper 提供的重写智能感知行为 但是 我似乎无法让它显示异常 任何带有
  • WCF - 将空元素转换为可为空的本机类型

    将 SOAP 字段元素留空会导致本机类型出现强制转换错误 遗憾的是 由于客户端限制 无法使用 xsi nil true 将 WCF 协定本机类型标记为 nullable 似乎不足以阻止将以下错误返回给客户端 字符串 不是有效的布尔值 在 S
  • 为什么c#异常处理机制不捕获win32异常

    我有一个 winforms 应用程序 Winforms 从 Program cs 开始 我们在其中定义了 main 我已将此代码放在 try catch 块中 STAThread static void Main try Applicati
  • 获取谷歌测试异常抛出消息[重复]

    这个问题在这里已经有答案了 我正在为我的项目使用谷歌测试框架 我从代码中抛出异常 throw DerivedClassException message 并在测试框架中使用 ASSERT THROW commond DerivedClass
  • 何时选择受控异常和非受控异常

    在Java 或任何其他具有检查异常的语言 中 当创建自己的异常类时 如何决定它是否应该检查或不检查 我的直觉是 如果调用者能够以某种有效的方式恢复 则需要检查异常 而对于不可恢复的情况 则需要检查异常 但我对其他人的想法感兴趣 只要您了解何
  • 从 WCF 服务返回接口

    我有一些 NET 远程处理代码 其中在某些服务器端类中实现的工厂方法返回具体对象的接口 也在同一台服务器上执行 NET 远程处理会自动创建代理 并允许我将接口传递给客户端 然后客户端可以直接调用它们 接口示例 public interfac
  • 如何从嵌套的 try-catch 块内重新抛出先前的异常? (C#)

    我有尝试类型转换的代码 如果失败 我想尝试其他方法 如果也失败 则重新抛出第一次转换尝试的原始异常 问题是我知道重新抛出的唯一方法是 throw 坐在 catch 块的末端 当我只想从另一个 catch 块中重新抛出时会发生什么 try v
  • 异步调用的任务限制?

    我有一个同步工作的 NET 4 5 WCF 客户端 我正在更新它以使用新的异步 等待功能来进行多个同时服务器调用以同时获取数据块 在结束之前 我担心同时运行的所有线程将使服务器饱和 更不用说明年升级到该角色时会终止我的 Azure 辅助角色
  • 如何在 C# 中向肥皂信封添加命名空间

    我想向我的肥皂信封添加命名空间设置 我想在 IClientMessageInspector 的 BeforeSendRequest 中更改它 或者您有更优雅的方法 例如
  • 有状态 WCF Web 服务

    我是 WCF 新手 我一直在尝试在 Web 服务中使用会话状态 我设法使用number http www codeproject com KB session SessionWithWS aspx msg 3227646 of http w
  • Haskell 中的“修复”是什么?为什么“修复错误”会打印无限字符串?为什么“拿 10 美元修复错误”也有同样的作用?

    长话短说 我在看西蒙 佩顿 琼斯的演讲 https www youtube com watch v re96UgMk6GQ 并且当时21 41 https youtu be re96UgMk6GQ t 1301他引用了一句话 我正在解决一个
  • 断开连接期间处理 pyserial 中的异常

    我有从串口读取数据的代码 try dataIn self port read 100 except serial SerialException do some work return None 如果我断开设备连接 我会捕获我无法处理的异常
  • 如何使用 Spring Data Rest 和 PagingAndSortingRepository 处理异常?

    假设我有一个像这样的存储库 public interface MyRepository extends PagingAndSortingRepository
  • DbContext.SaveChangesAsync 异常处理

    当搭建新的脚手架时ApiController通过 Visual Studio 2013 中的异步操作和实体框架支持 某些方法可以包装DbContext SaveChangesAsync https msdn microsoft com en
  • 从异常中提取类和文件名

    是否可以从异常对象中提取类名和文件名 我希望将更好的日志记录集成到我的应用程序中 并且我想包含异常发生位置的详细信息 在 MVC 中 Stacktrace 不返回文件名和类名 我有点不知道在哪里寻找它们 Thanks 您可以创建一个Stac
  • Clojure MySQL 语法错误异常(“[...] 靠近 '???????????????' [...]”)

    除了建立连接之外 我在使用 clojure contrib sql 做任何事情时都遇到困难 我有一个 mysqld 在 localhost 3306 上运行 数据库名为clj db 用户 clj user localhost 和密码 clj
  • 未处理的强制展开导致中止

    所以我对两者的理解pthread exit and pthread cancel是它们都会导致称为 强制展开 的类似异常的事情被抛出目标线程中的相关堆栈帧 可以捕获它以进行特定于线程的清理 但必须重新抛出 否则我们会得到隐式的abort 在

随机推荐

  • 为什么在尝试导入随机模块时会收到 TypeError: 'module' object is not callable ?

    我正在使用 Python 2 6 并尝试运行一个简单的随机数生成器程序 random py import random for i in range 5 random float 0 0 lt number lt 1 0 print ran
  • 如何在节标题和段落之间添加额外的空格

    我希望标题和段落之间以及段落之间有更多的空间 我不希望这是一个全局设置 但我想在需要的地方和时间使用它 感谢任何建议 您可以在行首使用竖线在输出中生成空行 像这样 Heading Paragraph with text
  • 无法将项目追加到多处理共享列表

    我正在使用多重处理来为我的应用程序创建子流程 我还在进程和子进程之间共享一个字典 我的代码示例 主要流程 from multiprocessing import Process Manager manager Manager shared
  • 制作 C# 项目 DLL 和 EXE

    我正在开发一个项目 需要有一个可执行文件以便用户可以运行配置界面和一个可以嵌入其他项目以使用其他一些功能的 DLL 有没有办法让 Visual Studio 同时生成可执行文件和 DLL 而不是每次都手动切换 我同意 TJMonk15 的观
  • 即使使用前向声明也会出现未定义的类型错误

    我正在阅读循环引用和前向声明 我确实知道在头文件中实现并不是一个好的设计实践 然而我正在尝试并且无法理解这种行为 使用以下代码 包含前向声明 我期望它能够构建 但是我收到此错误 Error 1 error C2027 use of unde
  • 如何避免JQuery和Prototype之间的冲突

    如果一个页面同时具有 JQuery 和 Prototype 那么我就会遇到冲突 有一个选项可以禁用 JQuery 的 符号 因此不会发生冲突 但是我必须使用关键字 JQuery 而不是 我想知道Prototype是否有任何选项可以解决这个冲
  • React-Router v4 渲染错误的组件但匹配正确

    我有一个带有两个按钮的侧边栏 测试 和 关于 Test 火箭图标 呈现在 test 处 About 主页图标 呈现在 处 它们都位于应用程序的根目录并嵌套在组件内 当我从 开始并单击 链接到 test 时 它总是加载 关于 组件 当我检查
  • 使用 iText 某些 pdf 文件水印不显示

    我们公司使用 iText 在一些 pdf 表格上标记一些水印文本 不是图像 我注意到 95 的表格可以正确显示水印 大约 5 则不能 我测试了一下 复制了2个原始pdf文件 一个被标记为ok 另一个不ok 然后通过一个小程序进行测试 结果相
  • 在透明背景的 flutter 上播放视频

    我在 Blender 上做了一些复杂的 3D 动画 我想在 flutter 上播放它们 问题是 当我将动画导出到视频并将其放在我的 flutter 应用程序上时 透明背景消失了 我使用 video player 在 flutter 上播放视
  • 在电子邮件中使用协议相对 URL 安全吗?

    关于在 HTML 中使用协议相对 URL 已有讨论 1 但是电子邮件呢 电子邮件客户端或 Gmail 等服务提供商在 HTML 电子邮件中使用时是否会删除或修改协议相对 URL 1 我可以将所有 http 链接更改为 吗 https sta
  • 如何在 R 中验证日期

    我有一个格式为的日期dd mm yyyy HH mm ss验证该日期的最佳和最简单的方法是什么 I tried d lt format Date date format d m Y H M S 但是当非法日期过去时如何捕获错误呢 简单的方法
  • 如何在 O(n) 时间内遍历二叉树而不需要额外的内存

    给定一棵带有整数 左指针和右指针的二叉树 如何在 O n 时间和 O 1 额外内存 无堆栈 队列 递归 内遍历该树 This guy http nandacumar blogspot com 2006 06 traversing tree
  • 为什么以下带有循环泛型的代码无法编译?

    以下是我的代码 class A
  • MVC 4 RC - Aspnet_regsql.exe

    我正在尝试使用 MVC 4 RC 默认模板启用登录 我以与 MVC 3 中相同的方式进行操作 Aspnet regsql exe gt SQL 服务器 然后我让连接字符串指向 SQL 服务器 当我尝试注册新用户时 我得到以下信息 Serve
  • Matlab 的快速 JSON 解析器

    您知道 Matlab 中有一个非常快速的 JSON 解析器吗 目前我正在使用JSONlab http www mathworks com matlabcentral fileexchange 33381 jsonlab a toolbox
  • 安装轮子后安装后脚本

    Using from setuptools command install import install 如果我运行 我可以轻松运行自定义安装后脚本python setup py install 这是相当微不足道 https stackov
  • 学习 WPF 会提高我的 ASP.NET 技能吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我已经在 Windows 窗体领域工作了很多年 而且仍然如此 我完全不熟悉 ASP NET 技术 也不熟悉其他 Web 相关技术 我曾合作过 O
  • 使用 Python/PyGObject 在 Windows 中加载 GTK-Glade 翻译

    我有一个 Python 脚本 可以加载可翻译的 Glade GUI 在 Linux 下一切工作正常 但我在理解 Windows 上的必要步骤时遇到了很多困难 Linux 下似乎需要的只是 import locale locale setlo
  • 你如何处理冗余代码?

    我有一个类 它是代码库项目的一部分 该项目是为不再需要的特定目的而编写的 所以问题是你如何处理这样的代码 您是否简单地删除它 或者您是否记住它 未来的开发人员可能会遇到它 但没有意识到他们可以忽略它 或者您是否有某种存档系统 是否存在公认的
  • 捕获通信异常而不是自定义故障异常 - WCF

    在服务器上我抛出这样的异常 catch SqlException exception if exception Message Contains Custom error from stored proc Exception to be t