如何跨SOAP Web服务传播异常?

时间:2013-05-14 16:14:01

标签: c# .net web-services exception asmx

我有一个标准的ASMX Web服务。我想抛出一个自定义异常并让它在客户端被捕获。唯一遇到的是SoapException。例如:

// Server side code
[WebMethod]
public void foo(string bar) {
    throw new CustomException(bar);
}

public class CustomException : Exception {
    ....
}


// Client side code
public void CallFoo() {
    try {
        service.foo()
    }
    catch (CustomException ex) {
        Console.WriteLine(ex.Message);
    }
    catch (SoapException ex) {
        Console.WriteLine("IT ALWAYS HITS HERE");
    }
    catch (Exception ex) {
        Console.WriteLine(ex.Message);
    }
}

有没有办法通过我的CustomException异常发送?或许以某种方式序列化它?

2 个答案:

答案 0 :(得分:1)

使您的自定义异常继承自SoapException

答案 1 :(得分:1)

根据MSDN:

'[...] XML Web服务方法抛出的任何异常都被抛出为SoapException [...]',Handling and Throwing Exceptions in XML Web Services

也就是说,没有什么可以阻止你创建一个异常包装类并将其序列化,就像这篇文章中提到的@davogones一样:

How to serialize an Exception object in C#?