c# – 从ASMX Web服务捕获自定义异常

前端之家收集整理的这篇文章主要介绍了c# – 从ASMX Web服务捕获自定义异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Web服务,我已经创建了一个自定义异常.假设这个异常的名字是InvalidContractException.

我想做的是如果一个特定的步骤发生,我想抛出这个异常.但是,我无法弄清楚客户端如何捕获InvalidContractException以便正确处理它.

这是一个用C#编写的ASP.Net Web服务

解决方法

你不能这样做:

> Web服务执行SOAP故障.异常是平台特定的.
>当ASMX Web服务中未处理异常时,.NET会将其转换为SOAP Fault.异常的细节不是序列化的.
>在ASMX客户端中,SOAP故障将被转换为SoapException.

ASMX Web服务对SOAP故障没有适当的支持.除了客户端的SoapException之外,没有办法获得任何异常.

升级到WCF的另一个原因.

作为您不能使用ASMX的一个例子,以下是WCF的工作原理. WCF允许您为每个Web服务操作指定哪些故障可以返回:

[ServiceContract]
public interface IMyServiceContract
{
    [FaultContract(typeof(IntegerZeroFault))]
    [FaultContract(typeof(SomeOtherFault))]
    [OperationContract]
    public string GetSomeString(int someInteger);
}

[DataContract]
public class IntegerZeroFault
{
    [DataMember]
    public string WhichInteger {get;set;}
}

[DataContract]
public class SomeOtherFault
{
    [DataMember]
    public string ErrorMessage {get;set;}
}

public class MyService : IMyServiceContract
{
    public string GetSomeString(int someInteger)
    {
        if (someInteger == 0) 
            throw new FaultException<IntegerZeroFault>(
                new IntegerZeroFault{WhichInteger="someInteger"});
        if (someInteger != 42)
            throw new FaultException<SomeOtherFault>(
                new SomeOtherFault{ErrorMessage ="That's not the anaswer"});
        return "Don't panic";
    }
}

然后,WCF客户机可以捕获例如FaultException< SomeOtherFault>.当我使用Java客户端尝试过这个问题时,它可以捕获IBM Rational Web Developer创建的SomeOtherFault来从Java Exception类派生.

原文链接:https://www.f2er.com/csharp/93619.html

猜你在找的C#相关文章