- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 WCF 客户端类中,我正在处理 Faulted()
事件,以便如果远程服务抛出异常并使 channel 出错,我仍然至少可以正常关闭它。这是我的代码:
protected void RemoteDataRetriever_Faulted(object sender, EventArgs e)
{
(sender as ICommunicationObject).Abort();
this.Dispose();
throw new ChannelTerminatedException("The remote service threw an unhandled exception and as a result the channel has been closed.");
}
ChannelTerminatedException
我手动抛出并向用户发送消息等。相反,我的异常被包裹在
System.ServiceModel.Diagnostics.CallbackException
中。 .好的。除了这里有一个问题:ServiceModel 库中不存在此 CallbackException 并且我似乎没有办法处理它,除非作为通用
Exception
,这对我的单元测试没有好处。这到底是怎么回事?我可以以某种方式禁用它并抛出我最初想要的异常吗?
最佳答案
事实证明,System.ServiceModel.Diagnostics.CallbackException
是一个内部类,填充在一个鲜为人知的程序集中,称为“%SystemRoot%\Microsoft.net\Framework\v3.0\Windows Communication Foundation\SMDiagnostics.dll”,它本身只包含内部类。好吧,这很糟糕,因为这意味着我们永远无法捕获该异常。但是,我能够找到实例化上述异常的类/方法 (System.ServiceModel.Diagnostics.ExceptionUtility.ThrowHelperCallback(Exception innerException)) 并发现它被 CommunicationObject 中的虚方法 OnFaulted() 调用。因此理论上任何派生自 CommunicationObject 的类(抱歉 ClientBase<T>
)都可以覆盖该方法并告诉它不要调用 ThrowHelperCallback()。这意味着唯一可行的候选者是派生自 ChannelFactoryBase<T>
的类。 .从理论上讲,我可以继续实现我自己的自定义 channel 工厂,它可以抑制烦人的 CallbackException,但目前工作量太大,所以我想我只需要处理它。
编辑:@Jeremy - 如果我检查通过线路返回的 SOAP 信封,我发现它给了我一个通用错误,正如预期的那样,这表明 CallbackException 没有被序列化,因此没有在服务器上生成。
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:Receiver</s:Value>
<s:Subcode>
<s:Value xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</s:Value>
</s:Subcode>
</s:Code>
<s:Reason>
<s:Text xml:lang="en-US">The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.</s:Text>
</s:Reason>
</s:Fault>
</s:Body>
关于.net - 什么是 System.ServiceModel.Diagnostics.CallbackException,为什么我不能处理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252747/
是这样的代码: System.Diagnostics.StackFrame stackFrame = new System.Diagnostics.StackFrame(); System.Refle
我正在为 Azure 网站配置诊断和 IIS 日志。Azure 管理门户显示将应用程序诊断存储到 Azure 表存储的选项: 单击“管理表存储”时会弹出一个对话框以提供 Azure 表详细信息: Bl
我正在为 Azure 网站配置诊断和 IIS 日志。Azure 管理门户显示将应用程序诊断存储到 Azure 表存储的选项: 单击“管理表存储”时会弹出一个对话框以提供 Azure 表详细信息: Bl
我计划在我的一个项目中使用 PerformanceCounter。我只知道Microsoft.Diagnostics 。然而我偶然发现了一个相当新的库 Microsoft.Diagnostics.Ev
我正在尝试设置 .NET 跟踪。我可以通过 System.Diagnostics.Trace 进行基本跟踪,但由于复杂的原因,我必须通过 System.Diagnostics.TraceSource
前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验。那么今天给大家讲一下在 .NET Core 2 中引入的
我不确定我是否理解 ETW 使用 System.Diagnostics.Tracing 和使用 System.Diagnostics.Trace 之间的主要区别。我知道使用它们我可以将事件转储到一些输
错误:未为<>和System.Diagnostics.Process类型定义运算符System.Diagnostics.Process。 功能错误 Public Shared Function Por
据我了解,System.Console 默认会写入 STDOUT,但是 System.Diagnostics.Trace 和 System.Diagnostics.Debug 呢? ?默认行为是什么,
启动应用程序时,我总是在“诊断工具”窗口中收到错误消息: The diagnostic tools failed unexpectedly. The Diagnostics Hub output in
我正在支持一个大型的旧应用程序。该代码使用 NLog 以及 Debug.WriteLine 和 Trace.WriteLine。我正在尝试将 Debug.WriteLine 和 Trace.Write
请求处理的正常时间范围是多少? 最佳答案 50 毫秒到 500 毫秒之间的任何时间都很好。 这当然只是服务器端。看看Yahoo's Best Practices for Speeding Up You
我已经克隆了 Typescript 存储库并正在查看代码,但它充满了这个错误: Cannot find name 'Diagnostics' 在看起来像这样的行上: Diagnostics._0_ex
我没有找到有关 Trace 和 TraceListener 如何跨多个域工作的信息。 Trace.WriteLine 的调用是跨多个域使用相同的实例,还是在每个域上创建自己的 Trace 类实例? 换
每次我在 Perl 中输入 use diagnostics 时,我都会收到一条错误消息说 couldn't find diagnostics data in /file name.etc... 有人可
为了解决通过不发送电子邮件的smtp服务器发送电子邮件的问题,建议我启用使用System.Diagnosis.TextWriterTraceListener进行日志记录以跟踪与smtp服务器的通信以跟
使用 perl 我几乎总是使用: use strict; use diagnostics; 我建议“使用诊断”而不是 use warnings; here我收到了一些负面反馈。所以,现在我在想: us
我正在研究使用log4net和System.Diagnostics.Trace进行日志记录之间的差异,并且我对观察到的性能差异感到好奇。 我创建了一个测试应用程序,以比较两种情况下这两种日志记录方法的
如何在PowerShell中将Y传递到由System.Diagnostic.Process启动的进程中? function Start-NewPlinkProcess( [string
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我是一名优秀的程序员,十分优秀!