通过Web服务正确捕获特定异常

2023-11-29

我目前在我们的客户端程序中使用 C# .NET 服务。作为服务器设计的一部分,会抛出几个定制的异常来指示特定错误(就像在任何正常的桌面程序中一样)。

问题在于,Web 服务捕获这些错误并将它们序列化为FaultException,并将实际异常(如NoRoomsAvailableException)写入Message 字段。

我的问题是是否有处理这些错误的最佳实践。我们刚刚开始研究这个问题,我们可能会做一些文本模式匹配来提取异常类型和错误消息,但这似乎是一种很老套的方法,所以任何“干净”的方法都会很费力。赞赏。


正确的方法是定义故障契约。例如,在您的网络服务中,您可以执行以下操作:

[DataContract]
public class NoRoomsAvailableFaultContract
{
    [DataMember]
    public string Message { get; set; }
}

接下来,您为给定的服务操作声明此合同

[ServiceContract]
public interface IMyServiceContract
{
    [OperationContract]
    [FaultContract(typeof(NoRoomsAvailableFaultContract))]
    void MyOperation();
}

你像这样实现它:

public class MyService : IMyServiceContract 
{
    public void MyOperation()
    {
        if (somethingWentWrong)
        {
            var faultContract = new NoRoomsAvailableFaultContract()
            {
                Message = "ERROR MESSAGE"
            };
            throw new FaultException<NoRoomsAvailableFaultContract>(faultContract);
        }
    }
}

在这种情况下,NoRoomsAvailableFaultContract 将在 WSDL 中公开,并且 svcutil.exe 可以生成代理类。然后你可以捕获这个异常:

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

通过Web服务正确捕获特定异常 的相关文章

随机推荐

  • Android ListView y 位置

    看起来 ListView 不像 ScrollView 那样公开它的 y 位置 换句话说 我需要记住 ListView 滚动到的确切位置 并在返回活动时设置它 只是为了澄清 我不需要所选的项目 这非常简单 我需要恢复 ListView 上精确
  • 而不是触发器来更新具有多个表的视图

    我试图找到一个示例 说明如何使用替代触发器更新多个表上的视图 也就是说 我想要更新该视图从中选择的多个表 我找不到任何例子 如果有人能告诉我如何做到这一点那就太好了 假设您在这里使用的是 SQLServer过于简单化 example CRE
  • 在回发时保留单选/复选框值?

    ASP 对象有一些我无法理解的东西 我在更新面板中有一个按钮 在同一页面上 我有一个复选框 一个单选按钮和一个文本框 在更新面板之外 当我单击按钮时 我可以访问所有这三个对象 文本框能够保留其文本值 但是当我检查选中状态时 单选 复选框总是
  • Pytorch 问题:当 num_workers > 0 时,我的 jupyter 卡住了

    这是我在 PyTorch 中的代码片段 当我使用 num workers gt 0 时 我的 jupiter 笔记本卡住了 我在这个问题上花了很多时间却没有任何答案 我没有 GPU 仅使用 CPU class IndexedDataset
  • 猫鼬发现返回奇怪的对象

    我当前的问题是 db collection find mongoose 命令 我对 mongoose mongodb 比较陌生 但我已经掌握了它的概念 这是我一直试图运行的测试代码 mongoose connect url function
  • 如何在 Ironpython 中使用 –X:Frames?

    Visual Studio 2010 Ironpython for net4 我想在ironpython中使用numpy 他们说我必须使用框架支持 因此 我应该在命令行上使用 X Frames 或 X FullFrames 运行 ipy 但
  • 在错误消息中显示行号

    在我使用过的大多数 MATLAB 实例中 每当我的代码中出现错误时 命令窗口中的错误消息都会显示行号 但是在我当前使用的计算机上 它仅显示以下内容 Subscripted assignment dimension mismatch 有没有办
  • C 中 bool 数据类型的 scanf 格式说明符

    我在 C std99 中使用 bool 数据类型 其定义在
  • Node.js 异常处理最佳实践

    几天前我刚刚开始尝试 Node js 我意识到每当我的程序中出现未处理的异常时 节点就会终止 这与我接触过的普通服务器容器不同 在普通服务器容器中 当发生未处理的异常时 只有工作线程会终止 并且容器仍然能够接收请求 这提出了几个问题 Is
  • Swift 块值错误

    我不断收到快速完成块错误 错误是 无法调用非函数类型的值 Array Array gt 下面还有一个错误的图像 这是代码 var blockFinih selectedTags Array
  • 用于二进制输出的 ostream_iterator

    我希望能够使用ostream iterator流式传输到二进制文件 但是ostream iterator uses a 格式化输出功能所以它会写 ASCII 而不是二进制 std ostream iterator是一个单遍 OutputIt
  • Kubernetes 和 AAD 身份验证

    在配置的 AKS 上 有一个 docker 容器 其中包含使用 AAD 身份验证的应用程序 基于本文还有配置的入口 API 运行良好 当我添加带有 https 前缀的 Azure Active Directory 应用程序注册回复 URL
  • 如何从外部服务异步调用 google 上的操作?

    我正在尝试使用 actionssdk 将 Google Home 连接到外部聊天机器人 我有一个 API 它接受用户输入并使用 Webhook 将其发送到我的聊天机器人 但我的聊天机器人以异步方式调用 API 的另一个端点做出响应 并且我无
  • Python mysql 使用变量来选择某个字段

    python 和 mysql 有一个棘手的问题 为了简单起见 以下代码返回变量 field 中的所有内容 它是一个字符串 例如 用户名 或 密码 options field userID entries cursor execute sel
  • 实现 GCM 时如何从 Android 应用程序调用服务器应用程序 servlet 来注册设备

    我正在尝试从 Android 开发者网站了解 GCM 我已经按照以下说明实现了客户端 Android 应用程序http developer android com google gcm client html和 http 服务器应用程序 不
  • 如何使用QWebChannel从python接收数据到js?

    我试图让我的 PyQt 应用程序与 JS 进行通信 但无法从 python 获取值 我在 python 端有两个插槽来获取和打印数据 在示例中 一个 int 从 JS 传递给 python python 加 5 并将其传回 然后 JS 调用
  • iPhone - 将视频显示为启动画面

    我需要在我的 iPhone 应用程序中将视频显示为闪屏 我正在使用以下代码 void setupMovie NSString moviePath NSBundle mainBundle pathForResource iphone ofTy
  • 如何使 PhpStorm 显示用 @method 声明的方法抛出的异常(或从魔术方法 docblock 继承它们)?

    假设以下示例代码 method bool someMethod class MyClass throws MyClassException public function call method args if this gt someCh
  • 是否有用于共享列表或地图的一部分的 YAML 语法?

    所以 我知道我可以做这样的事情 sitelist sites www foo com www bar com anotherlist sites 并且有sitelist and anotherlist两者都包含www foo com and
  • 通过Web服务正确捕获特定异常

    我目前在我们的客户端程序中使用 C NET 服务 作为服务器设计的一部分 会抛出几个定制的异常来指示特定错误 就像在任何正常的桌面程序中一样 问题在于 Web 服务捕获这些错误并将它们序列化为FaultException 并将实际异常 如N