WCF中Client捕获Service异常

WCF中客户端捕获服务端的异常共有三种方式

1.服务端不做任何处理,客户端直接捕获

 try
            {
                service.HelloWCF(mess);
            }
            catch (FaultException<FaultMessage> ex)
            {
                Console.WriteLine(ex.Detail.Message);
            }

此时客户端捕获的异常显示为WCF的默认ServiceError,没有任何指示信息

2.服务端使用includeExceptionDetailInFaults标识

<serviceBehaviors>
<behavior name="calculatorServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>

此时客户端可以捕获到服务器端异常的完整信息

客户端使用与上完全一致的catch可以捕获到Service Throw的完整信息,(利于调试,不适用于发布的系统)


3.服务端封装异常Message

服务端将异常Message封装为数据契约(DataContract),客户端Catch到该DataContract只能获取到该数据契约中的信息

服务端:

S-1:承载ExceptionMessage的数据契约

    /* *
* 用于存储异常信息的类,和普通数据契约没有区别
*
*/
[DataContract]
public class FaultMessage
{
[DataMember]
public string Message { get; set; }
}

S-2:可能会抛出异常的服务契约

    [ServiceContract]
public interface ITestException
{
[OperationContract]
[FaultContract(typeof(FaultMessage))]//该行声明了承载异常的数据契约
int add(int x,int y);
}

客户端:

C-1:发生异常的代码

            ITestException server = factory.CreateChannel();
try
{
server.add(1, 2);//该句发生异常
}
catch (FaultException<FaultMessage> ex)//捕获到封装后的异常信息
{
Console.WriteLine(ex.Detail.Message);//使用Detail获取封装的异常信息并获取其属性信息
}






转载于:https://www.cnblogs.com/wk1234/archive/2011/09/26/2191219.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值