zoukankan      html  css  js  c++  java
  • WCF 学习笔记 (1) Specify Fault Behaviors for the Service

    本帖示范在 WCF 中,如何用 FaultContractAttribute 指定 SOAP 错误,并搭配泛型的 FaultException<自订类> 去封装自订的错误讯息,以回传给客户端。本帖提供 WCF + ASP.NET 3.5 的示例下载。

    -------------------------------------------------
    本帖的示例代码下载点:
    https://files.cnblogs.com/WizardWu/090103.zip
    (执行本示例,需要 Visual Studio 2008 + SP1,不需要数据库)
    -------------------------------------------------

    用 VS 2008 + SP1,双击 WcfServiceLibrary1.sln 打开 solution 后,直接按 F5 执行示例,可看到下图 1 的画面。当您在 TextBox 输入数字并按 Button 时,WCF Service 会用 int.Parse 方法,将输入的字符串转型成数字;当您输入的非数字时,就会在 WCF 中引发转型错误,接着会在 Service1.cs 中抛回一个 FaultException<TDetial>。


    图 1

    FaultContract attribute 可将一个 operation 宣告成可输出错误,并可指定用哪种 type 来封装 fault 细节信息 (注意,fault 不等于 exception)。本帖下载示例的 IService1.cs 中,我们将接口中的 GetData 方法,用 FaultContract attribute 宣告成遇到 SOAP 错误时,可传回这些错误,如下:

    IService1.cs

    上方代码中,我们还看到一个自订类 FaultInfo,是用来提供相关的错误信息,并要在实作 IService1 接口的 Service1 类中,将自订的错误信息封装在泛型 FaultException 类中,亦即 FaultException<FaultInfo>,以便在发生转型错误时,将信息抛出至客户端的 Code-Behind 程序中 (Default.aspx.cs),如下:

    Service1.cs

    当然,您也可用旧式非泛型的 FaultException 类,或 FaultException<string> 直接指派自订的错误讯息,如下:
    throw new FaultException<string>("您输入的数字不合理");


    此外,我们自订的 GetData 方法,MEP (Message Exchange Patterns) 不可宣告为 one-way,如下:
    [OperationContract(IsOneWay = true)]
    [FaultContract(typeof(FaultInfo))]
    int GetData(string value);

    否则客户端项目在引用这个 WCF Service 会引发「无法更新服务参考」的错误,因此我们用 MEP 的默认值「Request/Response」。


    引用这个 WCF Service 的客户端 ASP.NET 项目,其 Default.aspx.cs 代码如下:

    Default.aspx.cs

    上方代码中的 Detail 属性,为 FaultException<TDetail> 泛型类所特有的属性,里然包含错误的详细信息,但旧式非泛型的 FaultException 类没有这个属性。


    建置 solution 完成后,若您去浏览 WSDL,会发现里面有 fault contract 的相关信息。


    -----------------------------------

    参考书籍:

    [1] Microsoft .NET Framework 3.5-Windows Communication Foundation, MCTS EXAM 70-503 Training Kit
    http://www.microsoft.com/learning/en/us/Books/12486.aspx
    http://www.amazon.com/MCTS-Self-Paced-Training-70-503-PRO-Certification/dp/0735625654

    -----------------------------------

    参考文件:

    [2] MSDN Library

    FaultContractAttribute 类:
    http://msdn.microsoft.com/zh-cn/library/system.servicemodel.faultcontractattribute.aspx

    FaultException<TDetail> 泛型类:
    http://msdn.microsoft.com/zh-cn/library/ms576199.aspx

    FaultException<TDetail>Detail 属性:
    http://msdn.microsoft.com/zh-cn/library/ms575596.aspx


    [3] WCF学习----我的第一个WCF程序
    http://www.cnblogs.com/ASPNET2008/archive/2008/06/01/1211613.html

    -----------------------------------

  • 相关阅读:
    细说 webpack 之流程篇
    git 撤销commit
    Git远程操作详解
    git Could not read from remote repository 解决
    Mysql 关键字及保留字
    使用 Intellij Idea 导出JavaDoc
    【树莓派】盒子常见问题处理基础帮助
    【树莓派】crontab设置Linux设备定时重启
    【医疗行业】关于dcm4che DICOM Toolkit:C-Move与C-Get
    关于操作系统:eos、deepin
  • 原文地址:https://www.cnblogs.com/WizardWu/p/1367338.html
Copyright © 2011-2022 走看看