WCF 错误处理

2024-01-16

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

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

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

private ServiceResponse PerformRemoteAction(ServiceRequest request, ProcessOperations operation)
{
    ...    
    try
    {
        //remote call
        switch (operation)
        {
            ...
            case ProcessOperations.VerifyAction: { response = client.VerifyAction(request); break; } 

            default: throw new NotImplementedException();
        }
    }
    catch (Exception ex)
    {
        AppManager.LogException(ex);
    }

    return response;
}

及服务实施

public override ServiceResponse VerifyAction(ServiceRequest request)
{
    RegisterRequest(request);

    try
    {
        var chain = new VerificationChain();
        Responce = chain.Run(request);
    }
    catch (Exception ex)
    {
        throw new FaultException<WcfException>(ExceptionFactory.Create(ex),
            new FaultReason(ex.Message));
    }

    SetSuccessfulResponce();

    return Responce;
}

服务 web.config 有

<behaviors>
    <serviceBehaviors>
        <behavior>
            <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
    </serviceBehaviors>
</behaviors>

This is my original exception enter image description here

And this is what I get on the cliententer image description here

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

Update
这是我定义的界面故障契约属性

[ServiceContract]
public interface IServiceOperation : IOperation
{
    ...
    [OperationContract(Action = "http://tempuri.org/ITestRunnerService/VerifyAction", ReplyAction = "http://tempuri.org/ITestRunnerService/VerifyAction")]
    [FaultContractAttribute(typeof(WcfException), Action = "http://tempuri.org/ITestRunnerService/ExecuteRequestWcfExceptionFault", Name = "WcfException", Namespace = "http://schemas.datacontract.org/2004/07/TH.Core.Exceptions")]
    ServiceResponse VerifyAction(ServiceRequest request);
}

这是我的Wcf异常 class

[DataContract]
public class WcfException : Exception
{
    [DataMember]
    public string Title { get; set; }

    [DataMember]
    public new string Message { get; set; }

    [DataMember]
    public new string InnerException { get; set; }

    [DataMember]
    public new string StackTrace { get; set; }
}

您是否尝试过捕获FaultException?

catch (FaultException<WcfException> ex)
{
   AppManager.LogException(ex);
}
catch (FaultException unknownFault)
{
   AppManager.LogException(unknownFault);
}

您将需要包括一个故障契约属性 http://msdn.microsoft.com/en-us/library/system.servicemodel.faultcontractattribute.aspx在您的合同中,以使其发挥作用。

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

WCF 错误处理 的相关文章

随机推荐

  • 使用pointinterval减少点数

    With pointinterval 可以告诉 Gnuplot 何时在线上插入点 现在 通过将其设置为 1 线不会穿过该点 例如 pi 1 lt gt lt gt lt gt lt gt lt gt lt gt lt gt lt gt lt
  • SonarQube 分析成功,但服务器未处理

    我最近将 SonarQube 服务器从 5 1 2 升级到 5 2 我们通过 Jenkins 使用 SonarQube Runner 2 4 运行分析 并且分析成功 问题是服务器不会处理分析 在针对失败的后台任务显示的日志末尾可以看到以下错
  • 使用 MessageContract 时,Webservice Response 会变成 ref 参数

    我定义了以下接口 ServiceContract public interface IHealthProducts OperationContract ResponseClass OrderSelfSignedHealthCertifica
  • 机架会话在 Chrome 中丢失

    我有一个非常简单的应用程序 托管在 EC2 上 使用 Sinatra 构建 并在 nginx 后面提供 Thin 服务 问题是 对于 Chrome 会话变量在 Sinatra 中会 丢失 在 Firefox 中不会发生这种情况 这是使用 R
  • 检测 Windows 还是 Linux? [复制]

    这个问题在这里已经有答案了 我正在寻求在 Windows 和 Linux 上运行通用的 Java 程序 该程序需要在每个平台上做一些不同的事情 那么我的 Java 程序如何 应该检测它是在 Linux 下运行还是在 Windows 下运行
  • Firebase 远程配置根据初始请求得出结果

    我正在使用单例从 Firebase 远程配置文件中获取参数 第一次运行应用程序时 我只能从单例中访问默认值 后续运行正确返回配置的值 有什么更好的方法可以做到这一点 以便我可以从新的开始访问这些值 protocol RemoteConfig
  • 如何缩放基于 FFT 的互相关,使其峰值等于 Pearson's rho

    问题描述 FFT 可用于计算两个信号或图像之间的互相关 确定两个信号之间的延迟或滞后A and B 只需定位以下峰值 IFFT FFT A conjugate FFT B 然而 峰值的幅度与各个信号的频谱的幅度相关 从而确定皮尔逊相关系数
  • iOS 应用程序蓝牙音频以“电话模式”出现。

    我有一个 iOS 应用程序 可以生成文本转语音 TTS 音频 AVSpeechSynthesizer 一位用户表示 他的汽车蓝牙扬声器上的音频以 电话模式 大概是拨打或接听电话时的音频 发出 而不是像 Youtube 以及音乐和地图应用程序
  • Google API:获取联系人照片

    通过遵循 API 我已经能够检索除联系人照片之外的所有内容 我可以从返回的 xml 中获取 img url 以及 gd etag 下面是 Google API 示例 这与我得到的结果是一样的 当然对于我的联系人来说 属性值是不同的 问题是我
  • Woocommerce:如何删除结账页面上的产品线?

    就像在购物车中一样 我怎样才能使用 x 链接删除结帐页面中的产品 有什么钩子可以做到这一点吗 thanks 我也遇到了同样的问题 谷歌也没找到解决的方法 所以我自己尝试并找到了这个解决方案 在您的主题中的结帐页面上覆盖 woocommerc
  • 服务引用下的哪些文件属于源代码管理。 (视觉工作室)

    我对 WPF 和 WCF 都很陌生 并且有一个 WPF 应用程序 该应用程序具有对 WCF 应用程序的服务引用 我在 Service References MyService 下创建了各种文件 我不太确定哪些需要进入源代码管理 哪些不需要
  • 跳转到文件而不修改跳转列表

    我正在编写一个类似标签的插件 它应该能够跳转到给定的文件 行和列 I use edit跳转到正确的文件 然后G 跳转到正确的位置 如所解释的here https stackoverflow com a 19195792 110081 我的问
  • 如何实现基于树的QComboBox

    我怎样才能实现QComboBox http qt project org doc qt 5 qcombobox html允许您从树结构中进行选择 类似于QTreeView http qt project org doc qt 5 qtree
  • cx_Freeze 转换的 GUI 应用程序 (tkinter) 在按下绘图按钮后崩溃

    我已经处理这个问题好几天了 希望能找到一些帮助 我开发了一个带有导入模块 tkinter numpy scipy matplotlib 的 GUI 应用程序 它在 python 本身中运行良好 转换为 exe 后 一切都按预期工作 但 ma
  • 博客文章的永久链接结构与 WordPress 中的页面不同?

    我希望帖子的永久链接结构与 WordPress 网站上的页面不同 例如 博客文章名称 这是一篇不错的博客文章 将获得永久链接 博客 这是一篇不错的博客文章 其中名为 提供的服务 的页面将获得永久链接 提供的服务 我知道我应该在永久链接结构中
  • 返回数据库名称==':内存:'或数据库名称中的'模式=内存'类型错误:'PosixPath'类型的参数不可迭代

    我正在 django 中制作一个网络应用程序 我尝试将它部署在 pythonanywhere 上 一切都很顺利 但最后当我尝试使用收集静态文件时python manage py collectstatic它给了我这个错误 return da
  • 当我们将鼠标悬停在元素上并设置其边框时,如何避免晃动?

    当我们将鼠标悬停在元素上并设置其边框时 如何避免晃动 这是我编写的代码示例 http jsfiddle net s3N2h http jsfiddle net s3N2h 有没有什么技巧可以避免晃动呢 假设我将鼠标悬停在文件上 会出现边框
  • git merge 应该忽略一个目录

    我在名为 reports 的目录中有大量数据 在与另一个分支进行 git merge 时 我在 reports 目录下的文件遇到很多冲突 我希望 git merge 忽略报告下的文件 换句话说 我想要来自主报告而不是来自实验室分支的所有数据
  • Makefile 依赖项可重用现有工件来重新制作通用目标

    这可能很简单 但我一直无法找到答案 我正在为嵌入式平台开发一个 gmake 系统 该系统有两个处理元件 每个元件都有自己的固件 称为 CoreA bin 和 CoreB 每个元件都有自己的依赖关系树 CoreB 的 make 系统来自第三方
  • WCF 错误处理

    Q如何在客户端获取原始异常 发生在服务器上 我正在使用自托管 WCF 服务和 C 4 并尝试设置适当的异常处理 我有一个看起来像这样的客户 private ServiceResponse PerformRemoteAction Servic